[PATCH] <short summary of the patch>
authorCamm Maguire <camm@debian.org>
Wed, 13 May 2026 12:16:53 +0000 (12:16 +0000)
committerCamm Maguire <camm@debian.org>
Tue, 16 Jun 2026 01:26:01 +0000 (21:26 -0400)
TODO: Put a short summary on the line above and replace this paragraph
with a longer explanation of this change. Complete the meta-information
with other relevant fields (see below for details). To make it easier, the
information below has been extracted from the changelog. Adjust it or drop
it.

Bug-Debian: https://bugs.debian.org/1105309

Gbp-Pq: Name Version_2_7_2pre18

41 files changed:
Makefile.am
Makefile.in
bin/mac_arm_relink [new file with mode: 0644]
cmpnew/gcl_cmpcall.lsp
cmpnew/gcl_cmpfun.lsp
cmpnew/gcl_cmptag.lsp
cmpnew/gcl_cmptype.lsp
configure
configure.ac
git.tag
h/aarch64-linux.h
h/aarch64-macosx.h [new file with mode: 0644]
h/arm-linux.h
h/armhf-linux.h
h/disable_mac_aslr.h [new file with mode: 0644]
h/gclincl.h.in
h/lu.h
h/mach64_aarch64_reloc.h [new file with mode: 0644]
h/riscv64-linux.h
info/control.texi
info/widgets.texi
lsp/gcl_fpe.lsp
lsp/gcl_iolib.lsp
o/alloc.c
o/cmpaux.c
o/file.d
o/gbc.c
o/gprof.c
o/hash.d
o/main.c
o/msbrk.c
o/pre_qfv.c
o/run_process.c
o/sfasli.c
o/sfaslmacho.c
o/sgbc.c
o/unexmacosx.c
o/unixsys.c
o/usig.c
o/xdrfuns.c
pcl/gcl_pcl_dfun.lisp

index 99dc1668ff1c8a88738d713527102d436f4cb389..21d59c58a944d88f576f3f2f9961040588fca48e 100644 (file)
@@ -148,15 +148,17 @@ ARCHT_H=h/elf32_armhf_reloc.h h/elf32_armhf_reloc_special.h h/elf32_arm_reloc.h
        h/386-macosx.h h/mingw.h h/gnuwin95.h h/FreeBSD.h h/solaris.h h/solaris-i386.h
 BUILT_H=h/new_decl.h o/boot.h h/cmpinclude.h
 
-C_SRC=o/typespec.c o/alloc.c o/gbc.c o/bitop.c o/main.c o/eval.c o/macros.c o/lex.c o/bds.c o/frame.c\
+C_SRC=o/typespec.c o/alloc.c o/gbc.c  o/main.c o/eval.c o/macros.c o/lex.c o/bds.c o/frame.c\
       o/predicate.c o/reference.c o/assignment.c o/bind.c o/let.c o/conditional.c o/block.c o/iteration.c\
       o/prog.c o/multival.c o/catch.c o/cfun.c o/cmpaux.c o/big.c o/number.c o/num_pred.c o/num_comp.c\
       o/num_arith.c o/num_sfun.c o/num_co.c o/num_log.c o/num_rand.c o/earith.c\
       o/array.c o/regexpr.c o/structure.c o/toplevel.c o/backq.c o/format.c\
       o/unixfsys.c o/unixfasl.c o/error.c o/unixtime.c o/unixsys.c o/unixsave.c o/funlink.c  o/fat_string.c\
-      o/run_process.c o/nfunlink.c o/usig.c o/usig2.c o/utils.c o/makefun.c o/sockets.c o/gmp_wrappers.c\
-      o/clxsocket.c o/nsocket.c o/prelink.c o/sfasl.c o/msbrk.c \
-      o/bcmp.c o/bcopy.c o/bzero.c o/user_init.c o/user_match.c o/mapfun.c
+      o/run_process.c o/usig.c o/usig2.c o/utils.c o/makefun.c o/sockets.c o/gmp_wrappers.c\
+      o/nsocket.c o/prelink.c o/sfasl.c o/msbrk.c \
+      o/user_init.c o/user_match.c o/mapfun.c
+#     o/bitop.c o/nfunlink.c o/clxsocket.c
+#     o/bcmp.c o/bcopy.c o/bzero.c
 
 D_SRC=o/character.d o/file.d o/gcl_readline.d o/hash.d o/list.d o/package.d o/pathname.d o/print.d\
       o/read.d o/sequence.d o/string.d o/symbol.d
@@ -255,13 +257,19 @@ unixport/saved_%: | unixport/raw_% unixport/gcl_cmpnopt_%.lsp \
                ( ! echo $@ | grep -q _gprof$$ || echo "(setq compiler::*default-prof-p* t)" >prof_init.lsp ) && \
                echo "(system:save-system \"../$@\")" | \
                cat ../unixport/init_raw.lsp prof_init.lsp - | \
-                       GCL_LSPSYSDIR=../$(srcdir)/unixport/ GCL_MEM_BOUND=29 \
+                       GCL_LSPSYSDIR=../$(srcdir)/unixport/ \
                                ../unixport/raw_$* $$(dirname $$(pwd))/unixport/ -libdir $$(dirname $$(pwd))/  && \
-               rm -f ../unixport/gcl_cmpnopt.lsp #FIXME GCL_MEM_BOUND darwin limited raw heap xcode linker __huge issue
+               rm -f ../unixport/gcl_cmpnopt.lsp
        rm -rf sb_$*
 
 unixport/raw_%: unixport/lib%.a $(FF) $(LF)
        $(CC) $(AM_LDFLAGS) -rdynamic $(LDFLAGS) -o $@ $(FF) $< $(LF) $(LIBS) #FIXME relro
+       ! which otool >/dev/null || \
+               ! otool -l $@ |grep -q LC_DYLD_CHAINED_FIXUPS || \
+               ( echo Relinking raw image for mac arm && \
+                 $(CC) \
+                     $$(otool -l $@ | bin/mac_arm_relink ps=$(SEGMENT_ALIGNMENT_BITS) base=$(TEXT_BASE)) \
+                     $(AM_LDFLAGS) -rdynamic $(LDFLAGS) -o $@ $(FF) $< $(LF) $(LIBS))
 
 unixport/gcl_cmpnopt_gcl_gprof.lsp unixport/gcl_cmpnopt_ansi_gcl_gprof.lsp:\
 unixport/gcl_cmpnopt_%_gprof.lsp: unixport/gcl_cmpnopt_%.lsp
@@ -277,12 +285,13 @@ unixport/lib%.a: lib/libbase_gcl.a $(LIBGPROF) unixport/sys_%.o
 $(addprefix unixport/lib,$(addsuffix .a,gcl_gprof ansi_gcl_gprof)): \
 unixport/lib%.a:lib/libbase_gcl_gprof.a unixport/sys_%.o
 
-.POSIX: # parallel job ordering
 E0=s typep nr deftype cmptype cmpinline cmpflet
 L0=c listlib seqlib type evalmacros
 E0_OBJS=$(addprefix gcl_,$(addsuffix .o,$(E0)))
 M0_OBJS=$(filter-out $(E0_OBJS) $(L0_OBJS),$(L_OBJS))
 L0_OBJS=$(addprefix gcl_,$(addsuffix .o,$(L0)))
+$(addprefix gcl0/,$(L0_OBJS)): | $(addprefix gcl0/,$(M0_OBJS))
+$(addprefix gcl0/,$(M0_OBJS)): | $(addprefix gcl0/,$(E0_OBJS))
 unixport/libgcl0.a: $(addprefix gcl0/,$(E0_OBJS) $(M0_OBJS) $(L0_OBJS))
 
 $(addprefix unixport/lib,$(addsuffix .a,gcl1 gcl2 gcl3 gcl)):\
@@ -320,6 +329,7 @@ unixport/pcl_gcl:  | unixport/saved_mod_gcl
 unixport/ansi_gcl:  | unixport/saved_pcl_gcl
 $(addprefix unixport/,gcl0 gcl1): unixport/% : unixport/cinit.lisp | %
        echo "(system:save-system \"$@\")" | cat $< - | $(word 2,$|)
+
 $(addprefix unixport/,gcl2 gcl3 gcl mod_gcl): unixport/% : | %
        ln -snf $$(basename $(word 2,$|)) $@
 
@@ -353,8 +363,8 @@ $(addprefix gcl0/,$(LL_OBJS)): gcl0/%.o : lsp/%.lsp
 $(addprefix gcl0/,$(LC_OBJS)): gcl0/%.o : cmpnew/%.lsp
 gcl0/%.o: | unixport/gcl0
        rm -f $(@D)/$*.done
-       $| -eval "(mapc 'load (directory \"$(@D)/*.done\"))" -compile $< -o $@
-       [ "$*" = "gcl_c" ] || [ "$*" = "gcl_listlib" ] || \
+       $(word 1,$|) -eval "(mapc 'load (directory \"$(@D)/*.done\"))" -compile $< -o $@
+       [ "$*" = "gcl_evalmacros" ] || [ "$*" = "gcl_top" ] || [ "$*" = "gcl_c" ] || [ "$*" = "gcl_listlib" ] || \
                ln -f $@ $$(echo $@ |sed 's,\.o,\.done,g') #FIXME directory link
 
 $(addprefix gcl1/,$(LL_OBJS)): gcl1/%.o : lsp/%.lsp
index 53614b4a59ba43ace185905d46eab3d8e35be1b2..ab818890dd02d9d789010bf24aafd47d815d4cf7 100644 (file)
@@ -176,29 +176,27 @@ lib_libbase_gcl_a_AR = $(AR) $(ARFLAGS)
 lib_libbase_gcl_a_RANLIB = $(RANLIB)
 lib_libbase_gcl_a_LIBADD =
 am__lib_libbase_gcl_a_SOURCES_DIST = o/typespec.c o/alloc.c o/gbc.c \
-       o/bitop.c o/main.c o/eval.c o/macros.c o/lex.c o/bds.c \
-       o/frame.c o/predicate.c o/reference.c o/assignment.c o/bind.c \
-       o/let.c o/conditional.c o/block.c o/iteration.c o/prog.c \
-       o/multival.c o/catch.c o/cfun.c o/cmpaux.c o/big.c o/number.c \
-       o/num_pred.c o/num_comp.c o/num_arith.c o/num_sfun.c \
-       o/num_co.c o/num_log.c o/num_rand.c o/earith.c o/array.c \
-       o/regexpr.c o/structure.c o/toplevel.c o/backq.c o/format.c \
-       o/unixfsys.c o/unixfasl.c o/error.c o/unixtime.c o/unixsys.c \
-       o/unixsave.c o/funlink.c o/fat_string.c o/run_process.c \
-       o/nfunlink.c o/usig.c o/usig2.c o/utils.c o/makefun.c \
-       o/sockets.c o/gmp_wrappers.c o/clxsocket.c o/nsocket.c \
-       o/prelink.c o/sfasl.c o/msbrk.c o/bcmp.c o/bcopy.c o/bzero.c \
-       o/user_init.c o/user_match.c o/mapfun.c h/compbas2.h \
-       h/compbas.h h/compprotos.h h/cstack.h h/enum.h h/error.h \
-       h/eval.h h/fixnum.h h/frame.h h/funlink.h h/globals.h \
-       h/gmp_wrappers.h h/immnum.h h/include.h h/lex.h h/linux.h \
-       h/lu.h h/make-init.h h/mp.h h/notcomp.h h/num_include.h \
-       h/object.h h/options.h h/page.h h/pageinfo.h h/pbits.h \
-       h/pool.h h/prelink.h h/protoize.h h/ptable.h h/rgbc.h \
-       h/sfun_argd.h h/stacks.h h/type.h h/usig.h h/vs.h h/writable.h \
-       o/regexp.h h/arth.h h/bsd.h h/bds.h h/att_ext.h h/bfdef.h \
-       h/compat.h gcl-tk/sheader.h h/make-decl.h h/defun.h o/ntheap.h \
-       h/compdefs.h h/cmpincl1.h h/mgmp.h h/cmponly_last.h \
+       o/main.c o/eval.c o/macros.c o/lex.c o/bds.c o/frame.c \
+       o/predicate.c o/reference.c o/assignment.c o/bind.c o/let.c \
+       o/conditional.c o/block.c o/iteration.c o/prog.c o/multival.c \
+       o/catch.c o/cfun.c o/cmpaux.c o/big.c o/number.c o/num_pred.c \
+       o/num_comp.c o/num_arith.c o/num_sfun.c o/num_co.c o/num_log.c \
+       o/num_rand.c o/earith.c o/array.c o/regexpr.c o/structure.c \
+       o/toplevel.c o/backq.c o/format.c o/unixfsys.c o/unixfasl.c \
+       o/error.c o/unixtime.c o/unixsys.c o/unixsave.c o/funlink.c \
+       o/fat_string.c o/run_process.c o/usig.c o/usig2.c o/utils.c \
+       o/makefun.c o/sockets.c o/gmp_wrappers.c o/nsocket.c \
+       o/prelink.c o/sfasl.c o/msbrk.c o/user_init.c o/user_match.c \
+       o/mapfun.c h/compbas2.h h/compbas.h h/compprotos.h h/cstack.h \
+       h/enum.h h/error.h h/eval.h h/fixnum.h h/frame.h h/funlink.h \
+       h/globals.h h/gmp_wrappers.h h/immnum.h h/include.h h/lex.h \
+       h/linux.h h/lu.h h/make-init.h h/mp.h h/notcomp.h \
+       h/num_include.h h/object.h h/options.h h/page.h h/pageinfo.h \
+       h/pbits.h h/pool.h h/prelink.h h/protoize.h h/ptable.h \
+       h/rgbc.h h/sfun_argd.h h/stacks.h h/type.h h/usig.h h/vs.h \
+       h/writable.h o/regexp.h h/arth.h h/bsd.h h/bds.h h/att_ext.h \
+       h/bfdef.h h/compat.h gcl-tk/sheader.h h/make-decl.h h/defun.h \
+       o/ntheap.h h/compdefs.h h/cmpincl1.h h/mgmp.h h/cmponly_last.h \
        h/elf32_armhf_reloc.h h/elf32_armhf_reloc_special.h \
        h/elf32_arm_reloc.h h/elf32_arm_reloc_special.h \
        h/elf32_hppa_reloc.h h/elf32_hppa_reloc_special.h \
@@ -226,9 +224,9 @@ am__lib_libbase_gcl_a_SOURCES_DIST = o/typespec.c o/alloc.c o/gbc.c \
        h/solaris-i386.h o/boot.c
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = o/typespec.$(OBJEXT) o/alloc.$(OBJEXT) o/gbc.$(OBJEXT) \
-       o/bitop.$(OBJEXT) o/main.$(OBJEXT) o/eval.$(OBJEXT) \
-       o/macros.$(OBJEXT) o/lex.$(OBJEXT) o/bds.$(OBJEXT) \
-       o/frame.$(OBJEXT) o/predicate.$(OBJEXT) o/reference.$(OBJEXT) \
+       o/main.$(OBJEXT) o/eval.$(OBJEXT) o/macros.$(OBJEXT) \
+       o/lex.$(OBJEXT) o/bds.$(OBJEXT) o/frame.$(OBJEXT) \
+       o/predicate.$(OBJEXT) o/reference.$(OBJEXT) \
        o/assignment.$(OBJEXT) o/bind.$(OBJEXT) o/let.$(OBJEXT) \
        o/conditional.$(OBJEXT) o/block.$(OBJEXT) \
        o/iteration.$(OBJEXT) o/prog.$(OBJEXT) o/multival.$(OBJEXT) \
@@ -242,12 +240,11 @@ am__objects_1 = o/typespec.$(OBJEXT) o/alloc.$(OBJEXT) o/gbc.$(OBJEXT) \
        o/unixfasl.$(OBJEXT) o/error.$(OBJEXT) o/unixtime.$(OBJEXT) \
        o/unixsys.$(OBJEXT) o/unixsave.$(OBJEXT) o/funlink.$(OBJEXT) \
        o/fat_string.$(OBJEXT) o/run_process.$(OBJEXT) \
-       o/nfunlink.$(OBJEXT) o/usig.$(OBJEXT) o/usig2.$(OBJEXT) \
-       o/utils.$(OBJEXT) o/makefun.$(OBJEXT) o/sockets.$(OBJEXT) \
-       o/gmp_wrappers.$(OBJEXT) o/clxsocket.$(OBJEXT) \
-       o/nsocket.$(OBJEXT) o/prelink.$(OBJEXT) o/sfasl.$(OBJEXT) \
-       o/msbrk.$(OBJEXT) o/bcmp.$(OBJEXT) o/bcopy.$(OBJEXT) \
-       o/bzero.$(OBJEXT) o/user_init.$(OBJEXT) o/user_match.$(OBJEXT) \
+       o/usig.$(OBJEXT) o/usig2.$(OBJEXT) o/utils.$(OBJEXT) \
+       o/makefun.$(OBJEXT) o/sockets.$(OBJEXT) \
+       o/gmp_wrappers.$(OBJEXT) o/nsocket.$(OBJEXT) \
+       o/prelink.$(OBJEXT) o/sfasl.$(OBJEXT) o/msbrk.$(OBJEXT) \
+       o/user_init.$(OBJEXT) o/user_match.$(OBJEXT) \
        o/mapfun.$(OBJEXT)
 am__objects_2 =
 @AMM_LIBBOOT_FALSE@am__objects_3 = o/boot.$(OBJEXT)
@@ -265,29 +262,27 @@ lib_libbase_gcl_gprof_a_AR = $(AR) $(ARFLAGS)
 lib_libbase_gcl_gprof_a_RANLIB = $(RANLIB)
 lib_libbase_gcl_gprof_a_LIBADD =
 am__lib_libbase_gcl_gprof_a_SOURCES_DIST = o/typespec.c o/alloc.c \
-       o/gbc.c o/bitop.c o/main.c o/eval.c o/macros.c o/lex.c o/bds.c \
-       o/frame.c o/predicate.c o/reference.c o/assignment.c o/bind.c \
-       o/let.c o/conditional.c o/block.c o/iteration.c o/prog.c \
-       o/multival.c o/catch.c o/cfun.c o/cmpaux.c o/big.c o/number.c \
-       o/num_pred.c o/num_comp.c o/num_arith.c o/num_sfun.c \
-       o/num_co.c o/num_log.c o/num_rand.c o/earith.c o/array.c \
-       o/regexpr.c o/structure.c o/toplevel.c o/backq.c o/format.c \
-       o/unixfsys.c o/unixfasl.c o/error.c o/unixtime.c o/unixsys.c \
-       o/unixsave.c o/funlink.c o/fat_string.c o/run_process.c \
-       o/nfunlink.c o/usig.c o/usig2.c o/utils.c o/makefun.c \
-       o/sockets.c o/gmp_wrappers.c o/clxsocket.c o/nsocket.c \
-       o/prelink.c o/sfasl.c o/msbrk.c o/bcmp.c o/bcopy.c o/bzero.c \
-       o/user_init.c o/user_match.c o/mapfun.c h/compbas2.h \
-       h/compbas.h h/compprotos.h h/cstack.h h/enum.h h/error.h \
-       h/eval.h h/fixnum.h h/frame.h h/funlink.h h/globals.h \
-       h/gmp_wrappers.h h/immnum.h h/include.h h/lex.h h/linux.h \
-       h/lu.h h/make-init.h h/mp.h h/notcomp.h h/num_include.h \
-       h/object.h h/options.h h/page.h h/pageinfo.h h/pbits.h \
-       h/pool.h h/prelink.h h/protoize.h h/ptable.h h/rgbc.h \
-       h/sfun_argd.h h/stacks.h h/type.h h/usig.h h/vs.h h/writable.h \
-       o/regexp.h h/arth.h h/bsd.h h/bds.h h/att_ext.h h/bfdef.h \
-       h/compat.h gcl-tk/sheader.h h/make-decl.h h/defun.h o/ntheap.h \
-       h/compdefs.h h/cmpincl1.h h/mgmp.h h/cmponly_last.h \
+       o/gbc.c o/main.c o/eval.c o/macros.c o/lex.c o/bds.c o/frame.c \
+       o/predicate.c o/reference.c o/assignment.c o/bind.c o/let.c \
+       o/conditional.c o/block.c o/iteration.c o/prog.c o/multival.c \
+       o/catch.c o/cfun.c o/cmpaux.c o/big.c o/number.c o/num_pred.c \
+       o/num_comp.c o/num_arith.c o/num_sfun.c o/num_co.c o/num_log.c \
+       o/num_rand.c o/earith.c o/array.c o/regexpr.c o/structure.c \
+       o/toplevel.c o/backq.c o/format.c o/unixfsys.c o/unixfasl.c \
+       o/error.c o/unixtime.c o/unixsys.c o/unixsave.c o/funlink.c \
+       o/fat_string.c o/run_process.c o/usig.c o/usig2.c o/utils.c \
+       o/makefun.c o/sockets.c o/gmp_wrappers.c o/nsocket.c \
+       o/prelink.c o/sfasl.c o/msbrk.c o/user_init.c o/user_match.c \
+       o/mapfun.c h/compbas2.h h/compbas.h h/compprotos.h h/cstack.h \
+       h/enum.h h/error.h h/eval.h h/fixnum.h h/frame.h h/funlink.h \
+       h/globals.h h/gmp_wrappers.h h/immnum.h h/include.h h/lex.h \
+       h/linux.h h/lu.h h/make-init.h h/mp.h h/notcomp.h \
+       h/num_include.h h/object.h h/options.h h/page.h h/pageinfo.h \
+       h/pbits.h h/pool.h h/prelink.h h/protoize.h h/ptable.h \
+       h/rgbc.h h/sfun_argd.h h/stacks.h h/type.h h/usig.h h/vs.h \
+       h/writable.h o/regexp.h h/arth.h h/bsd.h h/bds.h h/att_ext.h \
+       h/bfdef.h h/compat.h gcl-tk/sheader.h h/make-decl.h h/defun.h \
+       o/ntheap.h h/compdefs.h h/cmpincl1.h h/mgmp.h h/cmponly_last.h \
        h/elf32_armhf_reloc.h h/elf32_armhf_reloc_special.h \
        h/elf32_arm_reloc.h h/elf32_arm_reloc_special.h \
        h/elf32_hppa_reloc.h h/elf32_hppa_reloc_special.h \
@@ -316,7 +311,6 @@ am__lib_libbase_gcl_gprof_a_SOURCES_DIST = o/typespec.c o/alloc.c \
 am__objects_5 = o/lib_libbase_gcl_gprof_a-typespec.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-alloc.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-gbc.$(OBJEXT) \
-       o/lib_libbase_gcl_gprof_a-bitop.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-main.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-eval.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-macros.$(OBJEXT) \
@@ -361,21 +355,16 @@ am__objects_5 = o/lib_libbase_gcl_gprof_a-typespec.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-funlink.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-fat_string.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-run_process.$(OBJEXT) \
-       o/lib_libbase_gcl_gprof_a-nfunlink.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-usig.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-usig2.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-utils.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-makefun.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-sockets.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-gmp_wrappers.$(OBJEXT) \
-       o/lib_libbase_gcl_gprof_a-clxsocket.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-nsocket.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-prelink.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-sfasl.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-msbrk.$(OBJEXT) \
-       o/lib_libbase_gcl_gprof_a-bcmp.$(OBJEXT) \
-       o/lib_libbase_gcl_gprof_a-bcopy.$(OBJEXT) \
-       o/lib_libbase_gcl_gprof_a-bzero.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-user_init.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-user_match.$(OBJEXT) \
        o/lib_libbase_gcl_gprof_a-mapfun.$(OBJEXT)
@@ -499,13 +488,12 @@ am__depfiles_remade = bin/$(DEPDIR)/dpp.Po \
        gcl-tk/$(DEPDIR)/gcltkaux-tkAppInit.Po \
        gcl-tk/$(DEPDIR)/gcltkaux-tkMain.Po o/$(DEPDIR)/alloc.Po \
        o/$(DEPDIR)/array.Po o/$(DEPDIR)/assignment.Po \
-       o/$(DEPDIR)/backq.Po o/$(DEPDIR)/bcmp.Po o/$(DEPDIR)/bcopy.Po \
-       o/$(DEPDIR)/bds.Po o/$(DEPDIR)/big.Po o/$(DEPDIR)/bind.Po \
-       o/$(DEPDIR)/bitop.Po o/$(DEPDIR)/block.Po o/$(DEPDIR)/boot.Po \
-       o/$(DEPDIR)/bzero.Po o/$(DEPDIR)/catch.Po o/$(DEPDIR)/cfun.Po \
-       o/$(DEPDIR)/character.Po o/$(DEPDIR)/clxsocket.Po \
-       o/$(DEPDIR)/cmpaux.Po o/$(DEPDIR)/conditional.Po \
-       o/$(DEPDIR)/earith.Po o/$(DEPDIR)/error.Po o/$(DEPDIR)/eval.Po \
+       o/$(DEPDIR)/backq.Po o/$(DEPDIR)/bds.Po o/$(DEPDIR)/big.Po \
+       o/$(DEPDIR)/bind.Po o/$(DEPDIR)/block.Po o/$(DEPDIR)/boot.Po \
+       o/$(DEPDIR)/catch.Po o/$(DEPDIR)/cfun.Po \
+       o/$(DEPDIR)/character.Po o/$(DEPDIR)/cmpaux.Po \
+       o/$(DEPDIR)/conditional.Po o/$(DEPDIR)/earith.Po \
+       o/$(DEPDIR)/error.Po o/$(DEPDIR)/eval.Po \
        o/$(DEPDIR)/fat_string.Po o/$(DEPDIR)/file.Po \
        o/$(DEPDIR)/format.Po o/$(DEPDIR)/frame.Po \
        o/$(DEPDIR)/funlink.Po o/$(DEPDIR)/gbc.Po \
@@ -516,19 +504,14 @@ am__depfiles_remade = bin/$(DEPDIR)/dpp.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-array.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-assignment.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-backq.Po \
-       o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Po \
-       o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bds.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-big.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bind.Po \
-       o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-block.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-boot.Po \
-       o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-catch.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-cfun.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-character.Po \
-       o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-cmpaux.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-conditional.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-earith.Po \
@@ -555,7 +538,6 @@ am__depfiles_remade = bin/$(DEPDIR)/dpp.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-msbrk.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-multival.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-new_init.Po \
-       o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nsocket.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-num_arith.Po \
        o/$(DEPDIR)/lib_libbase_gcl_gprof_a-num_co.Po \
@@ -598,25 +580,25 @@ am__depfiles_remade = bin/$(DEPDIR)/dpp.Po \
        o/$(DEPDIR)/macros.Po o/$(DEPDIR)/main.Po \
        o/$(DEPDIR)/makefun.Po o/$(DEPDIR)/mapfun.Po \
        o/$(DEPDIR)/msbrk.Po o/$(DEPDIR)/multival.Po \
-       o/$(DEPDIR)/new_init.Po o/$(DEPDIR)/nfunlink.Po \
-       o/$(DEPDIR)/nsocket.Po o/$(DEPDIR)/num_arith.Po \
-       o/$(DEPDIR)/num_co.Po o/$(DEPDIR)/num_comp.Po \
-       o/$(DEPDIR)/num_log.Po o/$(DEPDIR)/num_pred.Po \
-       o/$(DEPDIR)/num_rand.Po o/$(DEPDIR)/num_sfun.Po \
-       o/$(DEPDIR)/number.Po o/$(DEPDIR)/package.Po \
-       o/$(DEPDIR)/pathname.Po o/$(DEPDIR)/predicate.Po \
-       o/$(DEPDIR)/prelink.Po o/$(DEPDIR)/print.Po \
-       o/$(DEPDIR)/prog.Po o/$(DEPDIR)/qfv.Po o/$(DEPDIR)/read.Po \
-       o/$(DEPDIR)/reference.Po o/$(DEPDIR)/regexpr.Po \
-       o/$(DEPDIR)/run_process.Po o/$(DEPDIR)/sequence.Po \
-       o/$(DEPDIR)/sfasl.Po o/$(DEPDIR)/sockets.Po \
-       o/$(DEPDIR)/string.Po o/$(DEPDIR)/structure.Po \
-       o/$(DEPDIR)/symbol.Po o/$(DEPDIR)/toplevel.Po \
-       o/$(DEPDIR)/typespec.Po o/$(DEPDIR)/unixfasl.Po \
-       o/$(DEPDIR)/unixfsys.Po o/$(DEPDIR)/unixsave.Po \
-       o/$(DEPDIR)/unixsys.Po o/$(DEPDIR)/unixtime.Po \
-       o/$(DEPDIR)/user_init.Po o/$(DEPDIR)/user_match.Po \
-       o/$(DEPDIR)/usig.Po o/$(DEPDIR)/usig2.Po o/$(DEPDIR)/utils.Po \
+       o/$(DEPDIR)/new_init.Po o/$(DEPDIR)/nsocket.Po \
+       o/$(DEPDIR)/num_arith.Po o/$(DEPDIR)/num_co.Po \
+       o/$(DEPDIR)/num_comp.Po o/$(DEPDIR)/num_log.Po \
+       o/$(DEPDIR)/num_pred.Po o/$(DEPDIR)/num_rand.Po \
+       o/$(DEPDIR)/num_sfun.Po o/$(DEPDIR)/number.Po \
+       o/$(DEPDIR)/package.Po o/$(DEPDIR)/pathname.Po \
+       o/$(DEPDIR)/predicate.Po o/$(DEPDIR)/prelink.Po \
+       o/$(DEPDIR)/print.Po o/$(DEPDIR)/prog.Po o/$(DEPDIR)/qfv.Po \
+       o/$(DEPDIR)/read.Po o/$(DEPDIR)/reference.Po \
+       o/$(DEPDIR)/regexpr.Po o/$(DEPDIR)/run_process.Po \
+       o/$(DEPDIR)/sequence.Po o/$(DEPDIR)/sfasl.Po \
+       o/$(DEPDIR)/sockets.Po o/$(DEPDIR)/string.Po \
+       o/$(DEPDIR)/structure.Po o/$(DEPDIR)/symbol.Po \
+       o/$(DEPDIR)/toplevel.Po o/$(DEPDIR)/typespec.Po \
+       o/$(DEPDIR)/unixfasl.Po o/$(DEPDIR)/unixfsys.Po \
+       o/$(DEPDIR)/unixsave.Po o/$(DEPDIR)/unixsys.Po \
+       o/$(DEPDIR)/unixtime.Po o/$(DEPDIR)/user_init.Po \
+       o/$(DEPDIR)/user_match.Po o/$(DEPDIR)/usig.Po \
+       o/$(DEPDIR)/usig2.Po o/$(DEPDIR)/utils.Po \
        xgcl-2/$(DEPDIR)/Events.Po xgcl-2/$(DEPDIR)/XStruct-2.Po \
        xgcl-2/$(DEPDIR)/XStruct-4.Po xgcl-2/$(DEPDIR)/Xutil-2.Po \
        xgcl-2/$(DEPDIR)/general-c.Po \
@@ -872,6 +854,7 @@ PRELINK_CHECK = @PRELINK_CHECK@
 RANLIB = @RANLIB@
 RL_LIB = @RL_LIB@
 RL_OBJS = @RL_OBJS@
+SEGMENT_ALIGNMENT_BITS = @SEGMENT_ALIGNMENT_BITS@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 STRIP = @STRIP@
@@ -879,6 +862,7 @@ TCLSH = @TCLSH@
 TCL_INCLUDE = @TCL_INCLUDE@
 TCL_LIBRARY = @TCL_LIBRARY@
 TCL_LIB_SPEC = @TCL_LIB_SPEC@
+TEXT_BASE = @TEXT_BASE@
 TK_CONFIG_PREFIX = @TK_CONFIG_PREFIX@
 TK_INCLUDE = @TK_INCLUDE@
 TK_LIBRARY = @TK_LIBRARY@
@@ -1057,16 +1041,18 @@ ARCHT_H = h/elf32_armhf_reloc.h h/elf32_armhf_reloc_special.h h/elf32_arm_reloc.
        h/386-macosx.h h/mingw.h h/gnuwin95.h h/FreeBSD.h h/solaris.h h/solaris-i386.h
 
 BUILT_H = h/new_decl.h o/boot.h h/cmpinclude.h
-C_SRC = o/typespec.c o/alloc.c o/gbc.c o/bitop.c o/main.c o/eval.c o/macros.c o/lex.c o/bds.c o/frame.c\
+C_SRC = o/typespec.c o/alloc.c o/gbc.c  o/main.c o/eval.c o/macros.c o/lex.c o/bds.c o/frame.c\
       o/predicate.c o/reference.c o/assignment.c o/bind.c o/let.c o/conditional.c o/block.c o/iteration.c\
       o/prog.c o/multival.c o/catch.c o/cfun.c o/cmpaux.c o/big.c o/number.c o/num_pred.c o/num_comp.c\
       o/num_arith.c o/num_sfun.c o/num_co.c o/num_log.c o/num_rand.c o/earith.c\
       o/array.c o/regexpr.c o/structure.c o/toplevel.c o/backq.c o/format.c\
       o/unixfsys.c o/unixfasl.c o/error.c o/unixtime.c o/unixsys.c o/unixsave.c o/funlink.c  o/fat_string.c\
-      o/run_process.c o/nfunlink.c o/usig.c o/usig2.c o/utils.c o/makefun.c o/sockets.c o/gmp_wrappers.c\
-      o/clxsocket.c o/nsocket.c o/prelink.c o/sfasl.c o/msbrk.c \
-      o/bcmp.c o/bcopy.c o/bzero.c o/user_init.c o/user_match.c o/mapfun.c
+      o/run_process.c o/usig.c o/usig2.c o/utils.c o/makefun.c o/sockets.c o/gmp_wrappers.c\
+      o/nsocket.c o/prelink.c o/sfasl.c o/msbrk.c \
+      o/user_init.c o/user_match.c o/mapfun.c
 
+#     o/bitop.c o/nfunlink.c o/clxsocket.c
+#     o/bcmp.c o/bcopy.c o/bzero.c
 D_SRC = o/character.d o/file.d o/gcl_readline.d o/hash.d o/list.d o/package.d o/pathname.d o/print.d\
       o/read.d o/sequence.d o/string.d o/symbol.d
 
@@ -1339,7 +1325,6 @@ o/$(DEPDIR)/$(am__dirstamp):
 o/typespec.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/alloc.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/gbc.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
-o/bitop.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/main.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/eval.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/macros.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
@@ -1384,7 +1369,6 @@ o/unixsave.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/funlink.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/fat_string.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/run_process.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
-o/nfunlink.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/usig.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/usig2.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/utils.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
@@ -1392,14 +1376,10 @@ o/makefun.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/sockets.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/gmp_wrappers.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
-o/clxsocket.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/nsocket.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/prelink.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/sfasl.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/msbrk.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
-o/bcmp.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
-o/bcopy.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
-o/bzero.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/user_init.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/user_match.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
 o/mapfun.$(OBJEXT): o/$(am__dirstamp) o/$(DEPDIR)/$(am__dirstamp)
@@ -1433,8 +1413,6 @@ o/lib_libbase_gcl_gprof_a-alloc.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-gbc.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
-o/lib_libbase_gcl_gprof_a-bitop.$(OBJEXT): o/$(am__dirstamp) \
-       o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-main.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-eval.$(OBJEXT): o/$(am__dirstamp) \
@@ -1523,8 +1501,6 @@ o/lib_libbase_gcl_gprof_a-fat_string.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-run_process.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
-o/lib_libbase_gcl_gprof_a-nfunlink.$(OBJEXT): o/$(am__dirstamp) \
-       o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-usig.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-usig2.$(OBJEXT): o/$(am__dirstamp) \
@@ -1537,8 +1513,6 @@ o/lib_libbase_gcl_gprof_a-sockets.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-gmp_wrappers.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
-o/lib_libbase_gcl_gprof_a-clxsocket.$(OBJEXT): o/$(am__dirstamp) \
-       o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-nsocket.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-prelink.$(OBJEXT): o/$(am__dirstamp) \
@@ -1547,12 +1521,6 @@ o/lib_libbase_gcl_gprof_a-sfasl.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-msbrk.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
-o/lib_libbase_gcl_gprof_a-bcmp.$(OBJEXT): o/$(am__dirstamp) \
-       o/$(DEPDIR)/$(am__dirstamp)
-o/lib_libbase_gcl_gprof_a-bcopy.$(OBJEXT): o/$(am__dirstamp) \
-       o/$(DEPDIR)/$(am__dirstamp)
-o/lib_libbase_gcl_gprof_a-bzero.$(OBJEXT): o/$(am__dirstamp) \
-       o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-user_init.$(OBJEXT): o/$(am__dirstamp) \
        o/$(DEPDIR)/$(am__dirstamp)
 o/lib_libbase_gcl_gprof_a-user_match.$(OBJEXT): o/$(am__dirstamp) \
@@ -1763,19 +1731,14 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/array.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/assignment.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/backq.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/bcmp.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/bcopy.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/bds.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/big.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/bind.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/bitop.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/block.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/boot.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/bzero.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/catch.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/cfun.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/character.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/clxsocket.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/cmpaux.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/conditional.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/earith.Po@am__quote@ # am--include-marker
@@ -1798,19 +1761,14 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-array.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-assignment.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-backq.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bds.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-big.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bind.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-block.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-boot.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-catch.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-cfun.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-character.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-cmpaux.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-conditional.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-earith.Po@am__quote@ # am--include-marker
@@ -1837,7 +1795,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-msbrk.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-multival.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-new_init.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nsocket.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-num_arith.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/lib_libbase_gcl_gprof_a-num_co.Po@am__quote@ # am--include-marker
@@ -1885,7 +1842,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/msbrk.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/multival.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/new_init.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/nfunlink.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/nsocket.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/num_arith.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@o/$(DEPDIR)/num_co.Po@am__quote@ # am--include-marker
@@ -1999,20 +1955,6 @@ o/lib_libbase_gcl_gprof_a-gbc.obj: o/gbc.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-gbc.obj `if test -f 'o/gbc.c'; then $(CYGPATH_W) 'o/gbc.c'; else $(CYGPATH_W) '$(srcdir)/o/gbc.c'; fi`
 
-o/lib_libbase_gcl_gprof_a-bitop.o: o/bitop.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-bitop.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Tpo -c -o o/lib_libbase_gcl_gprof_a-bitop.o `test -f 'o/bitop.c' || echo '$(srcdir)/'`o/bitop.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/bitop.c' object='o/lib_libbase_gcl_gprof_a-bitop.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-bitop.o `test -f 'o/bitop.c' || echo '$(srcdir)/'`o/bitop.c
-
-o/lib_libbase_gcl_gprof_a-bitop.obj: o/bitop.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-bitop.obj -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Tpo -c -o o/lib_libbase_gcl_gprof_a-bitop.obj `if test -f 'o/bitop.c'; then $(CYGPATH_W) 'o/bitop.c'; else $(CYGPATH_W) '$(srcdir)/o/bitop.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/bitop.c' object='o/lib_libbase_gcl_gprof_a-bitop.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-bitop.obj `if test -f 'o/bitop.c'; then $(CYGPATH_W) 'o/bitop.c'; else $(CYGPATH_W) '$(srcdir)/o/bitop.c'; fi`
-
 o/lib_libbase_gcl_gprof_a-main.o: o/main.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-main.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-main.Tpo -c -o o/lib_libbase_gcl_gprof_a-main.o `test -f 'o/main.c' || echo '$(srcdir)/'`o/main.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-main.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-main.Po
@@ -2629,20 +2571,6 @@ o/lib_libbase_gcl_gprof_a-run_process.obj: o/run_process.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-run_process.obj `if test -f 'o/run_process.c'; then $(CYGPATH_W) 'o/run_process.c'; else $(CYGPATH_W) '$(srcdir)/o/run_process.c'; fi`
 
-o/lib_libbase_gcl_gprof_a-nfunlink.o: o/nfunlink.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-nfunlink.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Tpo -c -o o/lib_libbase_gcl_gprof_a-nfunlink.o `test -f 'o/nfunlink.c' || echo '$(srcdir)/'`o/nfunlink.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/nfunlink.c' object='o/lib_libbase_gcl_gprof_a-nfunlink.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-nfunlink.o `test -f 'o/nfunlink.c' || echo '$(srcdir)/'`o/nfunlink.c
-
-o/lib_libbase_gcl_gprof_a-nfunlink.obj: o/nfunlink.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-nfunlink.obj -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Tpo -c -o o/lib_libbase_gcl_gprof_a-nfunlink.obj `if test -f 'o/nfunlink.c'; then $(CYGPATH_W) 'o/nfunlink.c'; else $(CYGPATH_W) '$(srcdir)/o/nfunlink.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/nfunlink.c' object='o/lib_libbase_gcl_gprof_a-nfunlink.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-nfunlink.obj `if test -f 'o/nfunlink.c'; then $(CYGPATH_W) 'o/nfunlink.c'; else $(CYGPATH_W) '$(srcdir)/o/nfunlink.c'; fi`
-
 o/lib_libbase_gcl_gprof_a-usig.o: o/usig.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-usig.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-usig.Tpo -c -o o/lib_libbase_gcl_gprof_a-usig.o `test -f 'o/usig.c' || echo '$(srcdir)/'`o/usig.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-usig.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-usig.Po
@@ -2727,20 +2655,6 @@ o/lib_libbase_gcl_gprof_a-gmp_wrappers.obj: o/gmp_wrappers.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-gmp_wrappers.obj `if test -f 'o/gmp_wrappers.c'; then $(CYGPATH_W) 'o/gmp_wrappers.c'; else $(CYGPATH_W) '$(srcdir)/o/gmp_wrappers.c'; fi`
 
-o/lib_libbase_gcl_gprof_a-clxsocket.o: o/clxsocket.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-clxsocket.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Tpo -c -o o/lib_libbase_gcl_gprof_a-clxsocket.o `test -f 'o/clxsocket.c' || echo '$(srcdir)/'`o/clxsocket.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/clxsocket.c' object='o/lib_libbase_gcl_gprof_a-clxsocket.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-clxsocket.o `test -f 'o/clxsocket.c' || echo '$(srcdir)/'`o/clxsocket.c
-
-o/lib_libbase_gcl_gprof_a-clxsocket.obj: o/clxsocket.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-clxsocket.obj -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Tpo -c -o o/lib_libbase_gcl_gprof_a-clxsocket.obj `if test -f 'o/clxsocket.c'; then $(CYGPATH_W) 'o/clxsocket.c'; else $(CYGPATH_W) '$(srcdir)/o/clxsocket.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/clxsocket.c' object='o/lib_libbase_gcl_gprof_a-clxsocket.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-clxsocket.obj `if test -f 'o/clxsocket.c'; then $(CYGPATH_W) 'o/clxsocket.c'; else $(CYGPATH_W) '$(srcdir)/o/clxsocket.c'; fi`
-
 o/lib_libbase_gcl_gprof_a-nsocket.o: o/nsocket.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-nsocket.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nsocket.Tpo -c -o o/lib_libbase_gcl_gprof_a-nsocket.o `test -f 'o/nsocket.c' || echo '$(srcdir)/'`o/nsocket.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nsocket.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nsocket.Po
@@ -2797,48 +2711,6 @@ o/lib_libbase_gcl_gprof_a-msbrk.obj: o/msbrk.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-msbrk.obj `if test -f 'o/msbrk.c'; then $(CYGPATH_W) 'o/msbrk.c'; else $(CYGPATH_W) '$(srcdir)/o/msbrk.c'; fi`
 
-o/lib_libbase_gcl_gprof_a-bcmp.o: o/bcmp.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-bcmp.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Tpo -c -o o/lib_libbase_gcl_gprof_a-bcmp.o `test -f 'o/bcmp.c' || echo '$(srcdir)/'`o/bcmp.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/bcmp.c' object='o/lib_libbase_gcl_gprof_a-bcmp.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-bcmp.o `test -f 'o/bcmp.c' || echo '$(srcdir)/'`o/bcmp.c
-
-o/lib_libbase_gcl_gprof_a-bcmp.obj: o/bcmp.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-bcmp.obj -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Tpo -c -o o/lib_libbase_gcl_gprof_a-bcmp.obj `if test -f 'o/bcmp.c'; then $(CYGPATH_W) 'o/bcmp.c'; else $(CYGPATH_W) '$(srcdir)/o/bcmp.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/bcmp.c' object='o/lib_libbase_gcl_gprof_a-bcmp.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-bcmp.obj `if test -f 'o/bcmp.c'; then $(CYGPATH_W) 'o/bcmp.c'; else $(CYGPATH_W) '$(srcdir)/o/bcmp.c'; fi`
-
-o/lib_libbase_gcl_gprof_a-bcopy.o: o/bcopy.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-bcopy.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Tpo -c -o o/lib_libbase_gcl_gprof_a-bcopy.o `test -f 'o/bcopy.c' || echo '$(srcdir)/'`o/bcopy.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/bcopy.c' object='o/lib_libbase_gcl_gprof_a-bcopy.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-bcopy.o `test -f 'o/bcopy.c' || echo '$(srcdir)/'`o/bcopy.c
-
-o/lib_libbase_gcl_gprof_a-bcopy.obj: o/bcopy.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-bcopy.obj -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Tpo -c -o o/lib_libbase_gcl_gprof_a-bcopy.obj `if test -f 'o/bcopy.c'; then $(CYGPATH_W) 'o/bcopy.c'; else $(CYGPATH_W) '$(srcdir)/o/bcopy.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/bcopy.c' object='o/lib_libbase_gcl_gprof_a-bcopy.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-bcopy.obj `if test -f 'o/bcopy.c'; then $(CYGPATH_W) 'o/bcopy.c'; else $(CYGPATH_W) '$(srcdir)/o/bcopy.c'; fi`
-
-o/lib_libbase_gcl_gprof_a-bzero.o: o/bzero.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-bzero.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Tpo -c -o o/lib_libbase_gcl_gprof_a-bzero.o `test -f 'o/bzero.c' || echo '$(srcdir)/'`o/bzero.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/bzero.c' object='o/lib_libbase_gcl_gprof_a-bzero.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-bzero.o `test -f 'o/bzero.c' || echo '$(srcdir)/'`o/bzero.c
-
-o/lib_libbase_gcl_gprof_a-bzero.obj: o/bzero.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-bzero.obj -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Tpo -c -o o/lib_libbase_gcl_gprof_a-bzero.obj `if test -f 'o/bzero.c'; then $(CYGPATH_W) 'o/bzero.c'; else $(CYGPATH_W) '$(srcdir)/o/bzero.c'; fi`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='o/bzero.c' object='o/lib_libbase_gcl_gprof_a-bzero.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -c -o o/lib_libbase_gcl_gprof_a-bzero.obj `if test -f 'o/bzero.c'; then $(CYGPATH_W) 'o/bzero.c'; else $(CYGPATH_W) '$(srcdir)/o/bzero.c'; fi`
-
 o/lib_libbase_gcl_gprof_a-user_init.o: o/user_init.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib_libbase_gcl_gprof_a_CPPFLAGS) $(CPPFLAGS) $(lib_libbase_gcl_gprof_a_CFLAGS) $(CFLAGS) -MT o/lib_libbase_gcl_gprof_a-user_init.o -MD -MP -MF o/$(DEPDIR)/lib_libbase_gcl_gprof_a-user_init.Tpo -c -o o/lib_libbase_gcl_gprof_a-user_init.o `test -f 'o/user_init.c' || echo '$(srcdir)/'`o/user_init.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) o/$(DEPDIR)/lib_libbase_gcl_gprof_a-user_init.Tpo o/$(DEPDIR)/lib_libbase_gcl_gprof_a-user_init.Po
@@ -4122,19 +3994,14 @@ distclean: distclean-am
        -rm -f o/$(DEPDIR)/array.Po
        -rm -f o/$(DEPDIR)/assignment.Po
        -rm -f o/$(DEPDIR)/backq.Po
-       -rm -f o/$(DEPDIR)/bcmp.Po
-       -rm -f o/$(DEPDIR)/bcopy.Po
        -rm -f o/$(DEPDIR)/bds.Po
        -rm -f o/$(DEPDIR)/big.Po
        -rm -f o/$(DEPDIR)/bind.Po
-       -rm -f o/$(DEPDIR)/bitop.Po
        -rm -f o/$(DEPDIR)/block.Po
        -rm -f o/$(DEPDIR)/boot.Po
-       -rm -f o/$(DEPDIR)/bzero.Po
        -rm -f o/$(DEPDIR)/catch.Po
        -rm -f o/$(DEPDIR)/cfun.Po
        -rm -f o/$(DEPDIR)/character.Po
-       -rm -f o/$(DEPDIR)/clxsocket.Po
        -rm -f o/$(DEPDIR)/cmpaux.Po
        -rm -f o/$(DEPDIR)/conditional.Po
        -rm -f o/$(DEPDIR)/earith.Po
@@ -4157,19 +4024,14 @@ distclean: distclean-am
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-array.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-assignment.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-backq.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bds.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-big.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bind.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-block.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-boot.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-catch.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-cfun.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-character.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-cmpaux.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-conditional.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-earith.Po
@@ -4196,7 +4058,6 @@ distclean: distclean-am
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-msbrk.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-multival.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-new_init.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nsocket.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-num_arith.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-num_co.Po
@@ -4244,7 +4105,6 @@ distclean: distclean-am
        -rm -f o/$(DEPDIR)/msbrk.Po
        -rm -f o/$(DEPDIR)/multival.Po
        -rm -f o/$(DEPDIR)/new_init.Po
-       -rm -f o/$(DEPDIR)/nfunlink.Po
        -rm -f o/$(DEPDIR)/nsocket.Po
        -rm -f o/$(DEPDIR)/num_arith.Po
        -rm -f o/$(DEPDIR)/num_co.Po
@@ -4446,19 +4306,14 @@ maintainer-clean: maintainer-clean-am
        -rm -f o/$(DEPDIR)/array.Po
        -rm -f o/$(DEPDIR)/assignment.Po
        -rm -f o/$(DEPDIR)/backq.Po
-       -rm -f o/$(DEPDIR)/bcmp.Po
-       -rm -f o/$(DEPDIR)/bcopy.Po
        -rm -f o/$(DEPDIR)/bds.Po
        -rm -f o/$(DEPDIR)/big.Po
        -rm -f o/$(DEPDIR)/bind.Po
-       -rm -f o/$(DEPDIR)/bitop.Po
        -rm -f o/$(DEPDIR)/block.Po
        -rm -f o/$(DEPDIR)/boot.Po
-       -rm -f o/$(DEPDIR)/bzero.Po
        -rm -f o/$(DEPDIR)/catch.Po
        -rm -f o/$(DEPDIR)/cfun.Po
        -rm -f o/$(DEPDIR)/character.Po
-       -rm -f o/$(DEPDIR)/clxsocket.Po
        -rm -f o/$(DEPDIR)/cmpaux.Po
        -rm -f o/$(DEPDIR)/conditional.Po
        -rm -f o/$(DEPDIR)/earith.Po
@@ -4481,19 +4336,14 @@ maintainer-clean: maintainer-clean-am
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-array.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-assignment.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-backq.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcmp.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bcopy.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bds.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-big.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bind.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bitop.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-block.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-boot.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-bzero.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-catch.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-cfun.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-character.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-clxsocket.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-cmpaux.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-conditional.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-earith.Po
@@ -4520,7 +4370,6 @@ maintainer-clean: maintainer-clean-am
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-msbrk.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-multival.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-new_init.Po
-       -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nfunlink.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-nsocket.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-num_arith.Po
        -rm -f o/$(DEPDIR)/lib_libbase_gcl_gprof_a-num_co.Po
@@ -4568,7 +4417,6 @@ maintainer-clean: maintainer-clean-am
        -rm -f o/$(DEPDIR)/msbrk.Po
        -rm -f o/$(DEPDIR)/multival.Po
        -rm -f o/$(DEPDIR)/new_init.Po
-       -rm -f o/$(DEPDIR)/nfunlink.Po
        -rm -f o/$(DEPDIR)/nsocket.Po
        -rm -f o/$(DEPDIR)/num_arith.Po
        -rm -f o/$(DEPDIR)/num_co.Po
@@ -4716,13 +4564,19 @@ unixport/saved_%: | unixport/raw_% unixport/gcl_cmpnopt_%.lsp \
                ( ! echo $@ | grep -q _gprof$$ || echo "(setq compiler::*default-prof-p* t)" >prof_init.lsp ) && \
                echo "(system:save-system \"../$@\")" | \
                cat ../unixport/init_raw.lsp prof_init.lsp - | \
-                       GCL_LSPSYSDIR=../$(srcdir)/unixport/ GCL_MEM_BOUND=29 \
+                       GCL_LSPSYSDIR=../$(srcdir)/unixport/ \
                                ../unixport/raw_$* $$(dirname $$(pwd))/unixport/ -libdir $$(dirname $$(pwd))/  && \
-               rm -f ../unixport/gcl_cmpnopt.lsp #FIXME GCL_MEM_BOUND darwin limited raw heap xcode linker __huge issue
+               rm -f ../unixport/gcl_cmpnopt.lsp
        rm -rf sb_$*
 
 unixport/raw_%: unixport/lib%.a $(FF) $(LF)
        $(CC) $(AM_LDFLAGS) -rdynamic $(LDFLAGS) -o $@ $(FF) $< $(LF) $(LIBS) #FIXME relro
+       ! which otool >/dev/null || \
+               ! otool -l $@ |grep -q LC_DYLD_CHAINED_FIXUPS || \
+               ( echo Relinking raw image for mac arm && \
+                 $(CC) \
+                     $$(otool -l $@ | bin/mac_arm_relink ps=$(SEGMENT_ALIGNMENT_BITS) base=$(TEXT_BASE)) \
+                     $(AM_LDFLAGS) -rdynamic $(LDFLAGS) -o $@ $(FF) $< $(LF) $(LIBS))
 
 unixport/gcl_cmpnopt_gcl_gprof.lsp unixport/gcl_cmpnopt_ansi_gcl_gprof.lsp:\
 unixport/gcl_cmpnopt_%_gprof.lsp: unixport/gcl_cmpnopt_%.lsp
@@ -4737,8 +4591,8 @@ $(addprefix unixport/lib,$(addsuffix .a,pre_gcl $(MY_DIRS))): \
 unixport/lib%.a: lib/libbase_gcl.a $(LIBGPROF) unixport/sys_%.o
 $(addprefix unixport/lib,$(addsuffix .a,gcl_gprof ansi_gcl_gprof)): \
 unixport/lib%.a:lib/libbase_gcl_gprof.a unixport/sys_%.o
-
-.POSIX: # parallel job ordering
+$(addprefix gcl0/,$(L0_OBJS)): | $(addprefix gcl0/,$(M0_OBJS))
+$(addprefix gcl0/,$(M0_OBJS)): | $(addprefix gcl0/,$(E0_OBJS))
 unixport/libgcl0.a: $(addprefix gcl0/,$(E0_OBJS) $(M0_OBJS) $(L0_OBJS))
 
 $(addprefix unixport/lib,$(addsuffix .a,gcl1 gcl2 gcl3 gcl)):\
@@ -4776,6 +4630,7 @@ unixport/pcl_gcl:  | unixport/saved_mod_gcl
 unixport/ansi_gcl:  | unixport/saved_pcl_gcl
 $(addprefix unixport/,gcl0 gcl1): unixport/% : unixport/cinit.lisp | %
        echo "(system:save-system \"$@\")" | cat $< - | $(word 2,$|)
+
 $(addprefix unixport/,gcl2 gcl3 gcl mod_gcl): unixport/% : | %
        ln -snf $$(basename $(word 2,$|)) $@
 
@@ -4809,8 +4664,8 @@ $(addprefix gcl0/,$(LL_OBJS)): gcl0/%.o : lsp/%.lsp
 $(addprefix gcl0/,$(LC_OBJS)): gcl0/%.o : cmpnew/%.lsp
 gcl0/%.o: | unixport/gcl0
        rm -f $(@D)/$*.done
-       $| -eval "(mapc 'load (directory \"$(@D)/*.done\"))" -compile $< -o $@
-       [ "$*" = "gcl_c" ] || [ "$*" = "gcl_listlib" ] || \
+       $(word 1,$|) -eval "(mapc 'load (directory \"$(@D)/*.done\"))" -compile $< -o $@
+       [ "$*" = "gcl_evalmacros" ] || [ "$*" = "gcl_top" ] || [ "$*" = "gcl_c" ] || [ "$*" = "gcl_listlib" ] || \
                ln -f $@ $$(echo $@ |sed 's,\.o,\.done,g') #FIXME directory link
 
 $(addprefix gcl1/,$(LL_OBJS)): gcl1/%.o : lsp/%.lsp
diff --git a/bin/mac_arm_relink b/bin/mac_arm_relink
new file mode 100644 (file)
index 0000000..e3be601
--- /dev/null
@@ -0,0 +1,37 @@
+#!/usr/bin/awk -f
+
+function from_hex (hh) {
+    jj=0;
+    if (substr(hh,1,2)=="0x")
+       hh=substr(hh,3,length(hh));
+    for (ii=1;ii<=length(hh);ii++)
+       jj=jj*16+A[substr(hh,ii,1)];
+    return jj;
+}
+function to_hex(jj) {
+    ss="";
+    for (;jj;jj=kk) {
+       kk=int(jj/16);
+       ss=substr(z,jj-kk*16+1,1) ss;
+    }
+    return ss;
+}
+
+
+BEGIN{z="0123456789abcdef";for (i=1;i<=length(z);i++) A[substr(z,i,1)]=i-1;}
+/^  *cmd / {c=$2;next}
+/^  *segname/ {n=$2;next}
+/^  *vmsize/ {if (c=="LC_SEGMENT_64") A[n]=$2;}
+END {
+    p=1;
+    for (i=0;i<ps;i++) p=p*2;
+    j="-Wl,-no_fixup_chains -Wl,-segaddr,__TEXT," base;
+    dc=from_hex(base);
+    dc=int((dc+from_hex(A["__TEXT"])+p+p-1)/p)*p;
+    j=j " -Wl,-segaddr,__DATA_CONST,0x" to_hex(dc);
+    dc=int((dc+from_hex(A["__DATA_CONST"])+p+p-1)/p)*p;
+    j=j " -Wl,-segaddr,__DATA,0x" to_hex(dc);
+    dc=int((dc+from_hex(A["__DATA"])+p+p-1)/p)*p;
+    j=j " -Wl,-segaddr,__HEAP,0x" to_hex(dc);
+    print j;
+}
index cbf0736ad8a2d2a334d34f1ca8716db3f8b3e1dc..a0600089fa143066e07bc3eaa0f93d345a98aa0f 100644 (file)
       (list (make-list (length all) :initial-element t)
            '* #.(flags ans set svt) 
            (ms
-           "({object _z,_f=fcall.fun=#0;fixnum _v=fcall.valp=(fixnum)#v;char _n=fcall.argd=#n-1;
+           "({object _z,_f=fcall.fun=#0;fixnum _v=fcall.valp=(fixnum)#v;volatile char _n=fcall.argd=#n-1;
         _n=Rset &&
             !_f->fun.fun_argd &&
             _n>=_f->fun.fun_minarg &&
index 8f802f764e7cc990aff370a3adaa525ac15b283b..0d86c6a0d0dc9c94151342c83b0f50f71df88531 100644 (file)
            (ms
             "({fixnum _v=(fixnum)#v;object _z,_f=(#0),_l=(#1),_ll=_l;
         object _x4=Cnil,_x3=Cnil,_x2=Cnil,_x1=Cnil,_x0=Cnil;
-        char _m=(#n-2),_n=Rset && !_f->fun.fun_argd ? _f->fun.fun_minarg-_m : -(MAX_ARGS+1);
+        char _m=(#n-2);volatile char _n=Rset && !_f->fun.fun_argd ? _f->fun.fun_minarg-_m : -(MAX_ARGS+1);
         char _reg=_f->fun.fun_minarg==_f->fun.fun_maxarg;
         fcall.fun=_f;fcall.valp=_v;fcall.argd=-(#n-1);
         switch (_n) {
index ba6ef9aa8cfffbae601e0e0e346c55fffc39e913..9228936d0681dc8b21006ed77a5395cd5f832753 100644 (file)
@@ -62,7 +62,8 @@
   (unless (tag-p form)
     (mapc (lambda (x)
            (when (var-p x)
-             (incf (var-register x) (the fixnum *reg-amount*))))
+             (unless (>= (var-register x) (ash (the fixnum *reg-amount*) 2))
+               (incf (var-register x) (the fixnum *reg-amount*)))))
          (info-ref (cadr form)))))
 
 (defun intersection-p (l1 l2)
index 2190dde1cf3b21c52eadf5aeb977a4ffc01dc8e5..b489f6a0c972bc680c6e2a4e04c49af7a2011c43 100644 (file)
 (defun range-decomp (tp)
   (mapcan (lambda (x &aux (f (pop x))(z (type-and tp x))) (when z (list (cons f z)))) +cmp-range-types+))
 
+(defun allocate-basic-stream-propagator (f tp)
+  (declare (ignore f))
+  (reduce
+   (lambda (y x)
+     (if (type-and (car x) tp)
+        (type-or1 (cadr x) y)
+       y))
+   '#.(mapcar (lambda (x) (list (object-tp x) (cmp-norm-tp (type-of (allocate-basic-stream x)))))
+            (let ((i -1))
+              (mapl (lambda (x) (setf (car x) (incf i))) (make-list (si::btp-count #tstream)))))
+   :initial-value nil))
+(si::putprop 'allocate-basic-stream 'allocate-basic-stream-propagator 'type-propagator)
 
 (dolist (l '(si::number-plus si::number-minus si::number-times + - * exp tanh sinh asinh))
   (si::putprop l 'super-range 'type-propagator))
index c73769508289e31d463c1cf4aa92e0f7941b6288..37ffbdffec6a25fe681cde21ee961c2a5d805a4f 100755 (executable)
--- a/configure
+++ b/configure
@@ -699,6 +699,8 @@ GMP
 HAVE_MALLOC_ZONE_MEMALIGN
 AMM_GPROF_FALSE
 AMM_GPROF_TRUE
+SEGMENT_ALIGNMENT_BITS
+TEXT_BASE
 GCL_CC
 CPP
 RANLIB
@@ -827,6 +829,11 @@ enable_debug
 enable_static
 enable_pic
 enable_dependency_tracking
+enable_text_base
+enable_segment_alignment_bits
+enable_initial_heap_vmsize
+enable_saved_pre_image_span
+enable_saved_image_span
 enable_gprof
 with_x
 enable_xdr
@@ -1483,7 +1490,7 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-silent-rules   less verbose build output (undo: "make V=1")
   --disable-silent-rules  verbose build output (undo: "make V=0")
-put bootstrap code in shared library to be discarded
+  --enable-libtool will put bootstrap code in shared library to be discarded
   --enable-machine=XXXX will force the use of one of the definitions in h/XXXX.defs
   --enable-widecons will use a three word cons with simplified typing
   --enable-safecdr will protect cdr from immfix and speed up type processing
@@ -1493,7 +1500,7 @@ put bootstrap code in shared library to be discarded
   --enable-bdssize=XXXX will compile in a binding stack of size XXX
   --enable-ihssize=XXXX will compile in a invocation history stack of size XXX
   --enable-frssize=XXXX will compile in a frame stack of size XXX
---enable-infodir=XXXX will force the use of a INFO_DIR=XXXXX as place to look for info
+  --enable-infodir=XXXX will force the use of a INFO_DIR=XXXXX as place to look for info
   --enable-xgcl=yes will compile in support for XGCL
   --enable-debug builds gcl with -g in CFLAGS to enable running under gdb
   --enable-static will link your GCL against static as opposed to shared system libraries
@@ -1502,11 +1509,16 @@ put bootstrap code in shared library to be discarded
                           do not reject slow dependency extractors
   --disable-dependency-tracking
                           speeds up one-time build
+  --enable-text_base=0x.... set base address for __TEXT
+  --enable-segment_alignment_bits=... set bit alignment for mach-o image segments
+  --enable-initial_heap_vmsize=0x.... set heap size for raw images
+  --enable-saved_pre_image_span=0x.... set address span for saved pre images
+  --enable-saved_image_span=0x.... set address span for saved images
   --enable-gprof builds gcl with -pg in CFLAGS to enable profiling with gprof
   --enable-xdr=yes will compile in support for XDR
   --enable-immfix will enable an immediate fixnum table above the C stack
   --enable-fastimmfix=XXXX will reject low immediate fixnums unless 2^XXX can be attained
- --enable-min_pagewidth=xxx sets 1<<xxx byte pages
 --enable-min_pagewidth=xxx sets 1<<xxx byte pages
   --enable-readline    enables command line completion via the readline library
   --enable-tcltk will try to build gcl-tk
   --enable-tkconfig=XXXX will force the use of a TK_CONFIG_PREFIX=XXXXX as place to look for tkConfig.sh and tclConfig.sh
@@ -4148,6 +4160,7 @@ case $canonical in
     powerpc*linux*) use=powerpc-linux;;
     powerpc-*-darwin*) use=powerpc-macosx;;
     *86*darwin*) use=386-macosx;;
+    *aarch64*darwin*) use=aarch64-macosx;;
     i*mingw*|i*msys*) use=mingw;;
     *cygwin*)
         if $CC -v 2>&1 | fgrep ming > /dev/null ;
@@ -7272,7 +7285,7 @@ case $use in
     386-macosx)
 #      assert_arg_to_cflags -Wno-error=implicit-function-declaration
        add_arg_to_cflags -Wno-incomplete-setjmp-declaration
-       assert_arg_to_ldflags -Wl,-no_pie
+       assert_arg_to_ldflags -Wl,-no_pie #FIXME remove
        if test "$build_cpu" = "x86_64" ; then
            assert_arg_to_cflags -m64
            assert_arg_to_ldflags -m64
@@ -7282,9 +7295,76 @@ case $use in
            assert_arg_to_ldflags -m32
            assert_arg_to_ldflags -Wl,-headerpad,56
         fi;;
+    aarch64-macosx)
+#      LISP_CFLAGS="$LISP_CFLAGS -mcmodel=large" #fixme 26bit trampolines
+       # Check whether --enable-text_base was given.
+if test ${enable_text_base+y}
+then :
+  enableval=$enable_text_base; TEXT_BASE=$enableval
+else case e in #(
+  e) TEXT_BASE=0x10000000000 ;;
+esac
+fi
+
+
+       # Check whether --enable-segment_alignment_bits was given.
+if test ${enable_segment_alignment_bits+y}
+then :
+  enableval=$enable_segment_alignment_bits; SEGMENT_ALIGNMENT_BITS=$enableval
+else case e in #(
+  e) SEGMENT_ALIGNMENT_BITS=14 ;;
+esac
+fi
+
+
+       ;;
     FreeBSD) assert_arg_to_ldflags -Z;;
 esac
 
+case $use in
+    *macosx*)
+        # Check whether --enable-initial_heap_vmsize was given.
+if test ${enable_initial_heap_vmsize+y}
+then :
+  enableval=$enable_initial_heap_vmsize; INITIAL_HEAP_VMSIZE=$enableval
+else case e in #(
+  e) INITIAL_HEAP_VMSIZE=0x70000000 ;;
+esac
+fi
+
+
+printf "%s\n" "#define INITIAL_HEAP_VMSIZE $INITIAL_HEAP_VMSIZE" >>confdefs.h
+
+
+       #Support libboot option
+       # Check whether --enable-saved_pre_image_span was given.
+if test ${enable_saved_pre_image_span+y}
+then :
+  enableval=$enable_saved_pre_image_span; SAVED_PRE_IMAGE_SPAN=$enableval
+else case e in #(
+  e) SAVED_PRE_IMAGE_SPAN=0x100000000 ;;
+esac
+fi
+
+
+printf "%s\n" "#define SAVED_PRE_IMAGE_SPAN $SAVED_PRE_IMAGE_SPAN" >>confdefs.h
+
+
+       # Check whether --enable-saved_image_span was given.
+if test ${enable_saved_image_span+y}
+then :
+  enableval=$enable_saved_image_span; SAVED_IMAGE_SPAN=$enableval
+else case e in #(
+  e) SAVED_IMAGE_SPAN=0x2000000000 ;;
+esac
+fi
+
+
+printf "%s\n" "#define SAVED_IMAGE_SPAN $SAVED_IMAGE_SPAN" >>confdefs.h
+
+       ;;
+esac
+
 if test "$enable_static" = "yes" ; then
     assert_arg_to_ldflags -static
     assert_arg_to_ldflags -Wl,-zmuldefs
@@ -11829,6 +11909,7 @@ LI_GITTAG="$GIT_TAG"
 
 LI_RELEASE="$RELEASE"
 
+#LI_CC="\"$GCL_CC -c `echo " $FINAL_CFLAGS $LISP_CFLAGS" | sed 's,-pg\b,,g'`\""
 LI_CC="\"$GCL_CC -c `echo " $FINAL_CFLAGS" | sed 's,-pg\b,,g'`\""
 
 LI_DFP="\"$GPL_FLAG\""
index ddf142571e0dea83b57f1cff9c71d51b3986902d..eee96c6fec1d7969f5ebac5f3aa7bfd0906ebf07 100644 (file)
@@ -60,6 +60,7 @@ case $canonical in
     powerpc*linux*) use=powerpc-linux;;
     powerpc-*-darwin*) use=powerpc-macosx;;
     *86*darwin*) use=386-macosx;;
+    *aarch64*darwin*) use=aarch64-macosx;;
     i*mingw*|i*msys*) use=mingw;;
     *cygwin*)
         if $CC -v 2>&1 | fgrep ming > /dev/null ;
@@ -71,7 +72,7 @@ case $canonical in
     i?86-pc-solaris*) use=solaris-i386;;
 esac
 
-AC_ARG_ENABLE([libboot],[put bootstrap code in shared library to be discarded],
+AC_ARG_ENABLE([libboot],[  --enable-libtool will put bootstrap code in shared library to be discarded],
              [libboot=$enableval],[libboot="yes"])
 
 if test "$use" = "gnuwin95" ; then
@@ -132,7 +133,7 @@ AC_ARG_ENABLE([ihssize],[  --enable-ihssize=XXXX will compile in a invocation hi
 AC_ARG_ENABLE([frssize],[  --enable-frssize=XXXX will compile in a frame stack of size XXX],
              [AC_DEFINE_UNQUOTED(FRSSIZE,$enableval,[frame stack size])])
 
-AC_ARG_ENABLE([infodir],[--enable-infodir=XXXX will force the use of a INFO_DIR=XXXXX as place to look for info],
+AC_ARG_ENABLE([infodir],[  --enable-infodir=XXXX will force the use of a INFO_DIR=XXXXX as place to look for info],
              [INFO_DIR=$enableval],[INFO_DIR=$prefix/share/info])
 INFO_DIR=`eval echo $INFO_DIR/`
 
@@ -329,7 +330,7 @@ case $use in
     386-macosx)
 #      assert_arg_to_cflags -Wno-error=implicit-function-declaration
        add_arg_to_cflags -Wno-incomplete-setjmp-declaration
-       assert_arg_to_ldflags -Wl,-no_pie
+       assert_arg_to_ldflags -Wl,-no_pie #FIXME remove
        if test "$build_cpu" = "x86_64" ; then
            assert_arg_to_cflags -m64
            assert_arg_to_ldflags -m64
@@ -339,9 +340,35 @@ case $use in
            assert_arg_to_ldflags -m32
            assert_arg_to_ldflags -Wl,-headerpad,56
         fi;;
+    aarch64-macosx)
+#      LISP_CFLAGS="$LISP_CFLAGS -mcmodel=large" #fixme 26bit trampolines
+       AC_ARG_ENABLE([text_base],[  --enable-text_base=0x.... set base address for __TEXT],
+             [TEXT_BASE=$enableval],[TEXT_BASE=0x10000000000])
+       AC_SUBST(TEXT_BASE)
+       AC_ARG_ENABLE([segment_alignment_bits],[  --enable-segment_alignment_bits=... set bit alignment for mach-o image segments],
+             [SEGMENT_ALIGNMENT_BITS=$enableval],[SEGMENT_ALIGNMENT_BITS=14])
+       AC_SUBST(SEGMENT_ALIGNMENT_BITS)
+       ;;
     FreeBSD) assert_arg_to_ldflags -Z;;
 esac
 
+case $use in
+    *macosx*)
+        AC_ARG_ENABLE([initial_heap_vmsize],[  --enable-initial_heap_vmsize=0x.... set heap size for raw images],
+          [INITIAL_HEAP_VMSIZE=$enableval],[INITIAL_HEAP_VMSIZE=0x70000000])
+       AC_DEFINE_UNQUOTED(INITIAL_HEAP_VMSIZE,$INITIAL_HEAP_VMSIZE,[heap size for raw images])
+
+       #Support libboot option
+       AC_ARG_ENABLE([saved_pre_image_span],[  --enable-saved_pre_image_span=0x.... set address span for saved pre images],
+          [SAVED_PRE_IMAGE_SPAN=$enableval],[SAVED_PRE_IMAGE_SPAN=0x100000000])
+       AC_DEFINE_UNQUOTED(SAVED_PRE_IMAGE_SPAN,$SAVED_PRE_IMAGE_SPAN,[address span for saved pre images])
+
+       AC_ARG_ENABLE([saved_image_span],[  --enable-saved_image_span=0x.... set address span for saved images],
+          [SAVED_IMAGE_SPAN=$enableval],[SAVED_IMAGE_SPAN=0x2000000000])
+       AC_DEFINE_UNQUOTED(SAVED_IMAGE_SPAN,$SAVED_IMAGE_SPAN,[address span for saved images])
+       ;;
+esac
+
 if test "$enable_static" = "yes" ; then
     assert_arg_to_ldflags -static
     assert_arg_to_ldflags -Wl,-zmuldefs
@@ -922,7 +949,7 @@ else
    AC_MSG_RESULT([not found])
 fi
 
-AC_ARG_ENABLE(min_pagewidth,[ --enable-min_pagewidth=xxx sets 1<<xxx byte pages],
+AC_ARG_ENABLE(min_pagewidth,[  --enable-min_pagewidth=xxx sets 1<<xxx byte pages],
              [min_pagewidth=$enableval],[])
 
 AC_MSG_CHECKING(for pagewidth)
@@ -1924,6 +1951,7 @@ LI_GITTAG="$GIT_TAG"
 AC_SUBST(LI_GITTAG)
 LI_RELEASE="$RELEASE"
 AC_SUBST(LI_RELEASE)
+#LI_CC="\"$GCL_CC -c `echo " $FINAL_CFLAGS $LISP_CFLAGS" | sed 's,-pg\b,,g'`\""
 LI_CC="\"$GCL_CC -c `echo " $FINAL_CFLAGS" | sed 's,-pg\b,,g'`\""
 AC_SUBST(LI_CC)
 LI_DFP="\"$GPL_FLAG\""
diff --git a/git.tag b/git.tag
index b91970635b8a0d6c9f693c27f5ad7101cf23c0c5..f419ae240130c0cd13e734282312c2f88a83aa51 100644 (file)
--- a/git.tag
+++ b/git.tag
@@ -1 +1 @@
-"Version_2_7_2pre17"
+"Version_2_7_2pre18"
index c3f359adc5727a18d612d8e9fcf85ebc70d7efc4..36f2857f3fc63137758a7006c83b3e31c11e40b0 100644 (file)
@@ -7,3 +7,5 @@
 #define SGC
 
 #define OUTPUT_MACH bfd_mach_aarch64
+
+#define ADDITIONAL_FEATURES ADD_FEATURE("NO-SIGFPE")
diff --git a/h/aarch64-macosx.h b/h/aarch64-macosx.h
new file mode 100644 (file)
index 0000000..9af4b51
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+    GCL config file for Mac OS X.
+
+    To be used with the following configure switches :
+        --enable-debug (optional)
+        --enable-machine=powerpc-macosx
+        --disable-statsysbfd
+        --enable-custreloc
+
+    Aurelien Chanudet <aurelien.chanudet(at)m4x.org>
+*/
+
+/* For those who are using ACL2, please remember to enlarge your shell stack (ulimit -s 8192).  */
+
+#include "bsd.h"
+
+#define DARWIN
+
+/* Mac OS X has its own executable file format (Mach-O).  */
+#undef HAVE_AOUT
+#undef HAVE_ELF
+
+
+/* Alternatively, we could use the global variable vm_page_size.  */
+/* #define PAGEWIDTH 12 */
+
+
+#include <unistd.h> /* to get sbrk defined */
+
+
+/** (si::save-system "...") a.k.a. unexec implementation  */
+
+/* The implementation of unexec for GCL is based on Andrew Choi's work for Emacs.
+   Previous pioneering implementation of unexec for Mac OS X by Steve Nygard.  */
+#define UNIXSAVE "unexmacosx.c"
+
+#undef malloc
+#define malloc my_malloc
+
+#undef free
+#define free my_free
+
+#undef realloc
+#define realloc my_realloc
+
+#undef valloc
+#define valloc my_valloc
+
+#undef calloc
+#define calloc my_calloc
+
+
+/** Dynamic loading implementation  */
+
+/* The sfasl{bfd,macosx,macho}.c files are included from sfasl.c.  */
+#ifdef HAVE_LIBBFD
+#define SEPARATE_SFASL_FILE "sfaslbfd.c"
+#else
+#define SPECIAL_RSYM "rsym_macosx.c"
+#define SEPARATE_SFASL_FILE "sfaslmacho.c"
+#endif
+
+/* The file has non Mach-O stuff appended.  We need to know where the Mach-O stuff ends.  */
+#include <stdio.h>
+extern int seek_to_end_ofile (FILE *);
+#define SEEK_TO_END_OFILE(fp) seek_to_end_ofile(fp)
+
+/** Stratified garbage collection implementation [ (si::sgc-on t) ]  */
+
+/* Mac OS X has sigaction (this is needed in o/usig.c)  */
+#define HAVE_SIGACTION
+
+/* Copied from {Net,Free,Open}BSD.h  */
+/* Modified according to Camm's instructions on April 15, 2004.  */
+#define HAVE_SIGPROCMASK
+
+/* until the sgc/save problem can be fixed.  20050114 CM*/
+/* #define SGC */
+
+#define MPROTECT_ACTION_FLAGS (SA_SIGINFO | SA_RESTART)
+
+#define INSTALL_MPROTECT_HANDLER                        \
+do {                                                    \
+  static struct sigaction sact;                         \
+  sigfillset (&(sact.sa_mask));                         \
+  sact.sa_flags = MPROTECT_ACTION_FLAGS;                \
+  sact.sa_sigaction = (void (*) ()) memprotect_handler; \
+  sigaction (SIGBUS, &sact, 0);                         \
+  sigaction (SIGSEGV, &sact, 0);                        \
+} while (0);
+
+#define GET_FAULT_ADDR(sig,code,sv,a) ((siginfo_t *)code)->si_addr
+
+
+/** Misc stuff  */
+
+#define IEEEFLOAT
+
+/* Mac OS X does not have _fileno as in linux.h. Nor does it have _cnt as in bsd.h.
+   Let's see what we can do with this declaration found in {Net,Free,Open}BSD.h.  */
+#undef LISTEN_FOR_INPUT
+#define LISTEN_FOR_INPUT(fp)                                            \
+do {int c=0;                                                            \
+  if (((FILE *)fp)->_r <=0 && (c=0, ioctl(((FILE *)fp)->_file, FIONREAD, &c), c<=0)) \
+        return(FALSE);                                                  \
+} while (0)
+
+#define GET_FULL_PATH_SELF(a_)                              \
+do {                                                        \
+uint32_t bufsize = 1024;                               \
+static char buf [1024];                                     \
+static char fub [1024];                                     \
+if (_NSGetExecutablePath (buf, &bufsize) != 0) {            \
+    error ("_NSGetExecutablePath failed");                  \
+}                                                           \
+if (realpath (buf, fub) == 0) {                             \
+    error ("realpath failed");                              \
+}                                                           \
+(a_) = fub;                                                 \
+} while (0)
+
+#define C_GC_OFFSET 4
+#include <mach-o/arm64/reloc.h>
+#define RELOC_H "mach64_aarch64_reloc.h"
+
+#define FPE_TCODE(x_) \
+  ({ufixnum _x=(x_),_y=0;                      \
+   switch(_x) {                                        \
+   case FPE_FLTINV: _y=FE_INVALID;break;       \
+   case FPE_FLTDIV: _y=FE_DIVBYZERO;break;     \
+   case FPE_FLTOVF: _y=FE_OVERFLOW;break;      \
+   case FPE_FLTUND: _y=FE_UNDERFLOW;break;     \
+   case FPE_FLTRES: _y=FE_INEXACT;break;       \
+   }                                           \
+   _y;                                         \
+  })
+#define SF(a_) ((siginfo_t *)a_)
+#define FPE_CODE(i_,v_) make_fixnum(FPE_TCODE((fixnum)SF(i_)->si_code))
+#define FPE_ADDR(i_,v_) make_fixnum((fixnum)SF(i_)->si_addr)
+#define FPE_CTXT(v_) Cnil
+
+#define FPE_INIT Cnil
+
+#include <sys/param.h>/*PATH_MAX MAXPATHLEN*/
+#undef MIN
+#undef MAX
+
+#undef sbrk
+#define sbrk msbrk
+#define INITIALIZE_BRK msbrk_init();
+
+#include <libkern/OSCacheControl.h>
+#define CLEAR_CACHE sys_icache_invalidate(memory->cfd.cfd_start,memory->cfd.cfd_size)
+
+#define W_X
+
+#define ADDITIONAL_FEATURES ADD_FEATURE("NO-SIGFPE")
index fcec61bedc287d691375c7167a0c542dcfc737fc..94999dbcf0f6433cdcc5d789512eb8b34d059434 100755 (executable)
@@ -8,3 +8,5 @@
 #define NEED_STACK_CHK_GUARD
 
 #define OUTPUT_MACH bfd_mach_arm_9
+
+#define ADDITIONAL_FEATURES ADD_FEATURE("NO-SIGFPE")
index 48273229c25b3faaa972ec67f52f48b7ae9cacab..90848b564d834d6768c092a9d7e5c940fa5cb9ca 100644 (file)
@@ -8,3 +8,5 @@
 #define NEED_STACK_CHK_GUARD
 
 #define OUTPUT_MACH bfd_mach_arm_9
+
+#define ADDITIONAL_FEATURES ADD_FEATURE("NO-SIGFPE")
diff --git a/h/disable_mac_aslr.h b/h/disable_mac_aslr.h
new file mode 100644 (file)
index 0000000..80820b6
--- /dev/null
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <spawn.h>
+#include <sys/wait.h>
+#include <mach-o/dyld.h>
+
+#ifndef POSIX_SPAWN_DISABLE_ASLR
+#define POSIX_SPAWN_DISABLE_ASLR 0x0100
+#endif
+
+void
+disable_aslr(int argc, char **argv, char **envp) {
+
+  pid_t pid;
+  posix_spawnattr_t attr;
+
+  if (!_dyld_get_image_vmaddr_slide(0)) {
+    return;
+  }
+
+  posix_spawnattr_init(&attr);
+  posix_spawnattr_setflags(&attr, POSIX_SPAWN_SETEXEC | POSIX_SPAWN_DISABLE_ASLR);
+  if (posix_spawn(&pid, argv[0], NULL, &attr, argv, envp)) {
+    perror("posix_spawn to disable ASLR failed");
+    gcl_abort();
+  }
+  posix_spawnattr_destroy(&attr);
+
+}
index 069435b8578fae0415a12edaf1f1dec9017824f6..54c44fb94c72dd7b596be3397a4e31c50046a4c9 100644 (file)
 /* size of immediate fixnum address space */
 #undef IM_FIX_LIM
 
+/* heap size for raw images */
+#undef INITIAL_HEAP_VMSIZE
+
 /* symbol name mangling convention */
 #undef LEADING_UNDERSCORE
 
 /* rl_readline_name returns type const char */
 #undef RL_READLINE_NAME_TYPE_CONST_CHAR
 
+/* address span for saved images */
+#undef SAVED_IMAGE_SPAN
+
+/* address span for saved pre images */
+#undef SAVED_PRE_IMAGE_SPAN
+
 /* The size of 'char', as computed by sizeof. */
 #undef SIZEOF_CHAR
 
diff --git a/h/lu.h b/h/lu.h
index aec187fb87beb4ff5e7d1389e76d58d8374037a7..4e2c7cc0184737e5469d31dadfd5b2353770056b 100644 (file)
--- a/h/lu.h
+++ b/h/lu.h
@@ -504,7 +504,7 @@ struct function {
 struct cfdata {
 
   FRSTWRD(tt,
-         cfw:LM(18),
+         cfd_nexp:LM(18),
          cfd_prof:1       /* profiling */
          );
 
diff --git a/h/mach64_aarch64_reloc.h b/h/mach64_aarch64_reloc.h
new file mode 100644 (file)
index 0000000..15fb35d
--- /dev/null
@@ -0,0 +1,57 @@
+#include <mach-o/arm64/reloc.h>
+
+#define GOT_RELOC(ri)                                                  \
+  ri->r_type==ARM64_RELOC_GOT_LOAD_PAGE21||                            \
+    ri->r_type==ARM64_RELOC_GOT_LOAD_PAGEOFF12||                       \
+    ri->r_type==ARM64_RELOC_BRANCH26
+#define GOT_RELOC_EXTRA(ri) ri->r_type==ARM64_RELOC_BRANCH26 ? 2*sizeof(int)/sizeof(ul) : 0
+
+  case ARM64_RELOC_ADDEND:
+    addend=a;
+    break;
+  case ARM64_RELOC_BRANCH26:
+    addend=0;
+    if (labs(((long)(ri->r_pcrel ? a-(ul)q : a))/4)&(~MASK(25))) {
+      int tramp[]={0x58ffffd0, /*ldr 19bit pc relative x16*/
+                  0xd61f0200};/*br x16*/
+      got+=n1[ri->r_symbolnum].n_desc-1;
+      *got++=a;
+      memcpy(got,tramp,sizeof(tramp));
+      a=(ul)got;
+    }
+    add_vals(q,MASK(26),((long)(ri->r_pcrel ? a-(ul)q : a))/4);
+    break;
+  case ARM64_RELOC_GOT_LOAD_PAGE21:
+    got+=n1[ri->r_symbolnum].n_desc-1;
+    *got=a;
+    a=(ul)got;
+  case ARM64_RELOC_PAGE21:
+    a+=addend;
+    addend=0;
+#define PG(x) ((x) & ~0xfff)
+    a=((long)(PG(a)-PG((ul)q))) / 0x1000;
+#undef PG
+    store_val(q,MASK(2) << 29, (a & 0x3) << 29);
+    store_val(q,MASK(19) << 5, (a & 0x1ffffc) << 3);
+    break;
+  case ARM64_RELOC_GOT_LOAD_PAGEOFF12:
+    got+=n1[ri->r_symbolnum].n_desc-1;
+    *got=a;
+    a=(ul)got;
+  case ARM64_RELOC_PAGEOFF12:
+    a+=addend;
+    addend=0;
+    a&=0xfff;
+    a>>=(((*q)>>29)&0x1)*                              /*not add/sub*/
+          ((((*q)>>26)&0x1) ?                          /*simd*/
+          ((((*q)>>22)&0x3) ?
+           (((*q)>>22)&0x3)+1 : (((*q)>>30)&0x1)) :
+          (((*q)>>30)&0x3));                          /*gp*/
+    store_val(q,MASK(12) << 10, a << 10);
+    break;
+  case ARM64_RELOC_UNSIGNED:
+    addend=0;
+    if (ri->r_extern || !ri->r_pcrel) {
+      add_valu(q,~0UL,ri->r_pcrel ? a-rel : a);
+    }
+    break;
index 4344c5f0b3445152412c0dafb1460a58fcf44adc..3fe9384d09bf3f68128e5198a33b39889b7699d7 100644 (file)
@@ -11,3 +11,5 @@
 #define NEED_STACK_CHK_GUARD
 
 #define OUTPUT_MACH bfd_mach_riscv64
+
+#define ADDITIONAL_FEATURES ADD_FEATURE("NO-SIGFPE")
index 9713ff9ec28f6ef310c29f240b2b23c148d61730..c3ac9acc7e583c2618acd3d6f7111ed73c3c7dad 100644 (file)
@@ -260,7 +260,7 @@ Some of the substitutions are only valid for
 certain types of events;  if they are used for other types of events
 the value substituted is undefined.
 
-@table @asis{}
+@table @asis
 @item @b{%%}
 Replaced with a single percent.
 @item @b{|%#|}
@@ -515,7 +515,7 @@ tk-dialog \- Create modal dialog and wait for response
 This procedure is part of the Tk script library.
 Its arguments describe a dialog box:
 
-@table @asis{}
+@table @asis
 @item @i{window}
 Name of top-level window to use for dialog.  Any existing window
 by this name is destroyed.
@@ -602,7 +602,7 @@ the focus.
 
 The @b{focus} command can take any of the following forms:
 
-@table @asis{}
+@table @asis
 @item @b{focus}
 If invoked with no arguments, @b{focus} returns the path name of
 the current focus window, or @b{none} if there is no focus window.
@@ -750,7 +750,7 @@ grab on a given display at once.
 
 The @b{grab} command can take any of the following forms:
 
-@table @asis{}
+@table @asis
 @item @b{grab }@r{?}@b{:global}@r{? }@i{window}
 Same as @b{grab :set}, described below.
 @item @b{grab :current }@r{?}@i{window}?
@@ -926,7 +926,7 @@ At any given time, the only menus available for traversal
 are those associated with the top-level window containing the
 input focus.
 Menu traversal is initiated by one of the following actions:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 If <F10> is typed, then the first menu button in the list for the
@@ -950,7 +950,7 @@ its first entry.
 
 Once a menu has been posted, the input focus is switched to that
 menu and the following actions are possible:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 Typing <ESC> or clicking mouse button 1 outside the menu button or
@@ -1039,7 +1039,7 @@ options;  @i{priority}@r{ defaults to }@b{interactive}.
 The @i{priority}@r{ arguments to the }@b{option} command are
 normally specified symbolically using one of the following values:
 
-@table @asis{}
+@table @asis
 @item @b{widgetDefault}
 Level 20.  Used for default values hard-coded into widgets.
 @item @b{startupFile}
@@ -1097,7 +1097,7 @@ the widget @b{.a.b.c}.  Command-line switches may be abbreviated,
 as long as the abbreviation is unambiguous.
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:activebackground}}
 @flushright
 Name=@code{"@b{activeBackground}@r{"} Class=@code{"}@b{Foreground}"}
@@ -1111,7 +1111,7 @@ will cause some action to occur.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:activeborderwidth}}
 @flushright
 Name=@code{"@b{activeBorderWidth}@r{"} Class=@code{"}@b{BorderWidth}"}
@@ -1127,7 +1127,7 @@ than one element at a time (e.g. menus but not buttons).
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:activeforeground}}
 @flushright
 Name=@code{"@b{activeForeground}@r{"} Class=@code{"}@b{Background}"}
@@ -1139,7 +1139,7 @@ See above for definition of active elements.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:anchor}}
 @flushright
 Name=@code{"@b{anchor}@r{"} Class=@code{"}@b{Anchor}"}
@@ -1155,7 +1155,7 @@ top-left corner is at the top-left corner of the widget.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:background or :bg}}
 @flushright
 Name=@code{"@b{background}@r{"} Class=@code{"}@b{Background}"}
@@ -1167,7 +1167,7 @@ widget.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:bitmap}}
 @flushright
 Name=@code{"@b{bitmap}@r{"} Class=@code{"}@b{Bitmap}"}
@@ -1185,7 +1185,7 @@ a text display.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:borderwidth or :bd}}
 @flushright
 Name=@code{"@b{borderWidth}@r{"} Class=@code{"}@b{BorderWidth}"}
@@ -1201,7 +1201,7 @@ The value may have any of the forms acceptable to @b{Tk_GetPixels}.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:cursor}}
 @flushright
 Name=@code{"@b{cursor}@r{"} Class=@code{"}@b{Cursor}"}
@@ -1213,7 +1213,7 @@ The value may have any of the forms acceptable to @b{Tk_GetCursor}.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:cursorbackground}}
 @flushright
 Name=@code{"@b{cursorBackground}@r{"} Class=@code{"}@b{Foreground}"}
@@ -1229,7 +1229,7 @@ the @b{insertBackground}@r{ option.}
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:cursorborderwidth}}
 @flushright
 Name=@code{"@b{cursorBorderWidth}@r{"} Class=@code{"}@b{BorderWidth}"}
@@ -1244,7 +1244,7 @@ the @b{insertBorderWidth}@r{ option.}
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:cursorofftime}}
 @flushright
 Name=@code{"@b{cursorOffTime}@r{"} Class=@code{"}@b{OffTime}"}
@@ -1260,7 +1260,7 @@ the @b{insertOffTime}@r{ option.}
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:cursorontime}}
 @flushright
 Name=@code{"@b{cursorOnTime}@r{"} Class=@code{"}@b{OnTime}"}
@@ -1274,7 +1274,7 @@ the @b{insertOnTime}@r{ option.}
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:cursorwidth}}
 @flushright
 Name=@code{"@b{cursorWidth}@r{"} Class=@code{"}@b{CursorWidth}"}
@@ -1292,7 +1292,7 @@ the @b{insertWidth}@r{ option.}
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:disabledforeground}}
 @flushright
 Name=@code{"@b{disabledForeground}@r{"} Class=@code{"}@b{DisabledForeground}"}
@@ -1307,7 +1307,7 @@ with a stippled fill pattern.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:exportselection}}
 @flushright
 Name=@code{"@b{exportSelection}@r{"} Class=@code{"}@b{ExportSelection}"}
@@ -1326,7 +1326,7 @@ to export selections.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:font}}
 @flushright
 Name=@code{"@b{font}@r{"} Class=@code{"}@b{Font}"}
@@ -1337,7 +1337,7 @@ Specifies the font to use when drawing text inside the widget.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:foreground or :fg}}
 @flushright
 Name=@code{"@b{foreground}@r{"} Class=@code{"}@b{Foreground}"}
@@ -1348,7 +1348,7 @@ Specifies the normal foreground color to use when displaying the widget.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:geometry}}
 @flushright
 Name=@code{"@b{geometry}@r{"} Class=@code{"}@b{Geometry}"}
@@ -1365,7 +1365,7 @@ widgets the units are usually pixels.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:insertbackground}}
 @flushright
 Name=@code{"@b{insertBackground}@r{"} Class=@code{"}@b{Foreground}"}
@@ -1379,7 +1379,7 @@ cursor happens to fall in the selection).
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:insertborderwidth}}
 @flushright
 Name=@code{"@b{insertBorderWidth}@r{"} Class=@code{"}@b{BorderWidth}"}
@@ -1392,7 +1392,7 @@ The value may have any of the forms acceptable to @b{Tk_GetPixels}.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:insertofftime}}
 @flushright
 Name=@code{"@b{insertOffTime}@r{"} Class=@code{"}@b{OffTime}"}
@@ -1406,7 +1406,7 @@ all the time.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:insertontime}}
 @flushright
 Name=@code{"@b{insertOnTime}@r{"} Class=@code{"}@b{OnTime}"}
@@ -1418,7 +1418,7 @@ milliseconds the insertion cursor should remain ``on'' in each blink cycle.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:insertwidth}}
 @flushright
 Name=@code{"@b{insertWidth}@r{"} Class=@code{"}@b{InsertWidth}"}
@@ -1434,7 +1434,7 @@ option.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:orient}}
 @flushright
 Name=@code{"@b{orient}@r{"} Class=@code{"}@b{Orient}"}
@@ -1448,7 +1448,7 @@ or @b{vertical} or an abbreviation of one of these.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:padx}}
 @flushright
 Name=@code{"@b{padX}@r{"} Class=@code{"}@b{Pad}"}
@@ -1466,7 +1466,7 @@ internal space to the left and/or right of what it displays inside.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:pady}}
 @flushright
 Name=@code{"@b{padY}@r{"} Class=@code{"}@b{Pad}"}
@@ -1484,7 +1484,7 @@ internal space above and/or below what it displays inside.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:relief}}
 @flushright
 Name=@code{"@b{relief}@r{"} Class=@code{"}@b{Relief}"}
@@ -1502,7 +1502,7 @@ the exterior of the widget.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:repeatdelay}}
 @flushright
 Name=@code{"@b{repeatDelay}@r{"} Class=@code{"}@b{RepeatDelay}"}
@@ -1515,7 +1515,7 @@ up- and down-arrows in scrollbars.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:repeatinterval}}
 @flushright
 Name=@code{"@b{repeatInterval}@r{"} Class=@code{"}@b{RepeatInterval}"}
@@ -1528,7 +1528,7 @@ auto-repeats.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:scrollcommand}}
 @flushright
 Name=@code{"@b{scrollCommand}@r{"} Class=@code{"}@b{ScrollCommand}"}
@@ -1563,7 +1563,7 @@ options.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:selectbackground}}
 @flushright
 Name=@code{"@b{selectBackground}@r{"} Class=@code{"}@b{Foreground}"}
@@ -1575,7 +1575,7 @@ items.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:selectborderwidth}}
 @flushright
 Name=@code{"@b{selectBorderWidth}@r{"} Class=@code{"}@b{BorderWidth}"}
@@ -1588,7 +1588,7 @@ The value may have any of the forms acceptable to @b{Tk_GetPixels}.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:selectforeground}}
 @flushright
 Name=@code{"@b{selectForeground}@r{"} Class=@code{"}@b{Background}"}
@@ -1600,7 +1600,7 @@ items.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:setgrid}}
 @flushright
 Name=@code{"@b{setGrid}@r{"} Class=@code{"}@b{SetGrid}"}
@@ -1623,7 +1623,7 @@ entry for more details.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:text}}
 @flushright
 Name=@code{"@b{text}@r{"} Class=@code{"}@b{Text}"}
@@ -1636,7 +1636,7 @@ determined by other options, such as @b{anchor}@r{ or }@b{justify}.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:textvariable}}
 @flushright
 Name=@code{"@b{textVariable}@r{"} Class=@code{"}@b{Variable}"}
@@ -1652,7 +1652,7 @@ particular widget and may be determined by other options, such as
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:underline}}
 @flushright
 Name=@code{"@b{underline}@r{"} Class=@code{"}@b{Underline}"}
@@ -1667,7 +1667,7 @@ on.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:xscrollcommand}}
 @flushright
 Name=@code{"@b{xScrollCommand}@r{"} Class=@code{"}@b{ScrollCommand}"}
@@ -1684,7 +1684,7 @@ on how this option is used.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:yscrollcommand}}
 @flushright
 Name=@code{"@b{yScrollCommand}@r{"} Class=@code{"}@b{ScrollCommand}"}
@@ -1768,7 +1768,7 @@ The first step in placing a child is to determine which side of
 the cavity it will lie against.  Any one of the following options
 may be used to specify a side:
 
-@table @asis{}
+@table @asis
 @item @b{top}
 Position the child's parcel against the top of the cavity,
 occupying the full width of the cavity.
@@ -1796,7 +1796,7 @@ desired width is the window's requested width.  However, extra
 space may be requested for the window using any of the following
 options:
 
-@table @asis{}
+@table @asis
 @item @b{padx }@i{num}
 Add @i{num} pixels to the window's requested width before computing
 the parcel size as described above.
@@ -1825,7 +1825,7 @@ is smaller.  If the parcel is larger than the window's requested
 size, then the following options may be used to expand the
 window to partially or completely fill the parcel:
 
-@table @asis{}
+@table @asis
 @item @b{fill}
 Set the window's size to equal the parcel size.
 @item @b{fillx}
@@ -1912,7 +1912,7 @@ packing them in order around the edges of the parent.
 The @b{pack} command can have any of several forms, depending
 on the @i{option} argument:
 
-@table @asis{}
+@table @asis
 @item @b{pack }@i{slave }@r{?}@i{slave ...}@r{? ?}@i{options}?
 If the first argument to @b{pack} is a window name (any value
 starting with ``.''), then the command is processed in the same
@@ -1947,7 +1947,7 @@ Defaults to 0.
 If a slave's parcel is larger than its requested dimensions, this
 option may be used to stretch the slave.
 @i{Style} must have one of the following values:
-@table @asis{}
+@table @asis
 @item @b{none}
 Give the slave its requested dimensions plus any internal padding
 requested with @b{:ipadx}@r{ or }@b{:ipady}.  This is the default.
@@ -1998,7 +1998,7 @@ then any unspecified options for them retain their previous values rather
 than receiving default values.
 .RE
 
-@table @asis{}
+@table @asis
 @item @b{pack :forget }@i{slave }@r{?}@i{slave ...}?
 Removes each of the @i{slave}s from the packing order for its
 master and unmaps their windows.
@@ -2046,7 +2046,7 @@ This area is called the @i{cavity};  for the first slave it
 is the entire area of the master.
 
 For each slave the packer carries out the following steps:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 The packer allocates a rectangular @i{parcel} for the slave
@@ -2185,7 +2185,7 @@ If the placer is already managing @i{window}, then the
 In this form the @b{place} command returns an empty string as result.
 The following @i{option:value} pairs are supported:
 
-@table @asis{}
+@table @asis
 @item @b{:in }@i{master}
 @i{Master} specifes the path name of the window relative
 to which @i{window} is to be placed.
@@ -2395,7 +2395,7 @@ The first argument to @b{selection} determines the format of the
 rest of the arguments and the behavior of the command.  The following
 forms are currently supported:
 
-@table @asis{}
+@table @asis
 @item @b{selection :clear }@i{window}
 If there is a selection anywhere on @i{window}'s display, clear it
 so that no window owns the selection anymore.  Returns an empty string.
@@ -2544,7 +2544,7 @@ particular window.
 The command can take any of a number of different forms
 depending on the @i{option} argument.  The legal forms are:
 
-@table @asis{}
+@table @asis
 @item @b{tk :colormodel }@i{window}@r{ ?}@i{newValue}?
 If @i{newValue} isn't specified, this command returns the current
 color model in use for @i{window}'s screen, which will be either
@@ -2631,7 +2631,7 @@ tkvars \- Variables used or set by Tk
 The following Tcl variables are either set or used by Tk at various times
 in its execution:
 
-@table @asis{}
+@table @asis
 @item @b{tk_library}
 Tk sets this variable hold the name of a directory containing a library
 of Tcl scripts related to Tk.  These scripts include an initialization
@@ -2763,7 +2763,7 @@ The @b{winfo} command is used to retrieve information about windows
 managed by Tk.  It can take any of a number of different forms,
 depending on the @i{option} argument.  The legal forms are:
 
-@table @asis{}
+@table @asis
 @item @b{winfo :atom }@i{name}
 Returns a decimal string giving the integer identifier for the
 atom whose name is @i{name}.  If no atom exists with the name
@@ -2964,7 +2964,7 @@ top-level window.
 
 The legal forms for the @b{wm} command are:
 
-@table @asis{}
+@table @asis
 @item @b{wm :aspect }@i{window}@r{ ?}@i{minNumer minDenom maxNumer maxDenom}?
 If @i{minNumer}@r{, }@i{minDenom}@r{, }@i{maxNumer}@r{, and }@i{maxDenom}
 are all specified, then they will be passed to the window manager
@@ -3251,7 +3251,7 @@ a handler, then Tk handles the message by destroying the window for
 which it was received.
 .RE
 
-@table @asis{}
+@table @asis
 @item @b{wm :sizefrom }@i{window}@r{ ?}@i{who}?
 If @i{who}@r{ is specified, it must be either }@b{program} or
 @b{user}, or an abbreviation of one of these two.  It indicates
index 6032c1e38e857c625a920b853d78a83f9b4f8862..472259eb6e9813f6d489d8c39fb5bc77b96c8246 100644 (file)
@@ -63,7 +63,7 @@ background        disabledForeground  padY
 @unnumberedsubsec Arguments for Button
 
 
-@table  @asis{}
+@table @asis
 @item @code{@b{:command}}
 @flushright
 Name=@code{"@b{command}@r{"} Class=@code{"}@b{Command}"}
@@ -76,7 +76,7 @@ window.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:height}}
 @flushright
 Name=@code{"@b{height}@r{"} Class=@code{"}@b{Height}"}
@@ -92,7 +92,7 @@ from the size of the bitmap or text being displayed in it.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:state}}
 @flushright
 Name=@code{"@b{state}@r{"} Class=@code{"}@b{State}"}
@@ -111,7 +111,7 @@ button presses.  In this state the @b{disabledForeground} and
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -166,7 +166,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.  The following
 commands are possible for button widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:activate}
 Change the button's state to @b{active} and redisplay the button
 using its active foreground and background colors instead of normal
@@ -210,7 +210,7 @@ This command is ignored if the button's state is @b{disabled}.
 
 Tk automatically creates class bindings for buttons that give them
 the following default behavior:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 The button activates whenever the mouse passes over it and deactivates
@@ -306,7 +306,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.  The following
 commands are possible for listbox widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:configure}@r{ ?}@i{option}@r{? ?}@i{value option value ...}?
 Query or modify the configuration options of the widget.
 If no @i{option} is specified, returns a list describing all of
@@ -350,7 +350,7 @@ the index of the (visible) listbox element nearest to that y-coordinate.
 @item @i{pathName }@b{:scan}@r{ }@i{option args}
 This command is used to implement scanning on listboxes.  It has
 two forms, depending on @i{option}:
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:scan :mark }@i{x y}
 Records @i{x}@r{ and }@i{y} and the current view in the listbox
 window;  used in conjunction with later @b{scan dragto} commands.
@@ -370,7 +370,7 @@ value is an empty string.
 This command is used to adjust the selection within a listbox.  It
 has several forms, depending on @i{option}.  In all of the forms
 the index @b{end} refers to the last element in the listbox.
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:select :adjust }@i{index}
 Locate the end of the selection nearest to the element given by
 @i{index}@r{, and adjust that end of the selection to be at }@i{index}
@@ -414,7 +414,7 @@ element of the listbox.  Returns an empty string.
 
 Tk automatically creates class bindings for listboxes that give them
 the following default behavior:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 When button 1 is pressed over a listbox, the element underneath the
@@ -459,7 +459,7 @@ background           cursor          foreground     relief
 @unnumberedsubsec Arguments for Scale
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:command}}
 @flushright
 Name=@code{"@b{command}@r{"} Class=@code{"}@b{Command}"}
@@ -474,7 +474,7 @@ scale.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:from}}
 @flushright
 Name=@code{"@b{from}@r{"} Class=@code{"}@b{From}"}
@@ -486,7 +486,7 @@ scale.  Must be an integer.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:label}}
 @flushright
 Name=@code{"@b{label}@r{"} Class=@code{"}@b{Label}"}
@@ -500,7 +500,7 @@ just above the left end of the scale.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:length}}
 @flushright
 Name=@code{"@b{length}@r{"} Class=@code{"}@b{Length}"}
@@ -514,7 +514,7 @@ it is the scale's width.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:showvalue}}
 @flushright
 Name=@code{"@b{showValue}@r{"} Class=@code{"}@b{ShowValue}"}
@@ -526,7 +526,7 @@ value of the scale is to be displayed.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:sliderforeground}}
 @flushright
 Name=@code{"@b{sliderForeground}@r{"} Class=@code{"}@b{sliderForeground}"}
@@ -539,7 +539,7 @@ determined by the @b{activeForeground} option.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:sliderlength}}
 @flushright
 Name=@code{"@b{sliderLength}@r{"} Class=@code{"}@b{SliderLength}"}
@@ -552,7 +552,7 @@ to @b{Tk_GetPixels}.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:state}}
 @flushright
 Name=@code{"@b{state}@r{"} Class=@code{"}@b{State}"}
@@ -565,7 +565,7 @@ won't activate when the mouse enters it.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:tickinterval}}
 @flushright
 Name=@code{"@b{tickInterval}@r{"} Class=@code{"}@b{TickInterval}"}
@@ -578,7 +578,7 @@ as 0, then no tick-marks will be displayed.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:to}}
 @flushright
 Name=@code{"@b{to}@r{"} Class=@code{"}@b{To}"}
@@ -591,7 +591,7 @@ greater than the @b{from} option.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -652,7 +652,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.  The following
 commands are possible for scale widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:configure}@r{ ?}@i{option}@r{? ?}@i{value option value ...}?
 Query or modify the configuration options of the widget.
 If no @i{option} is specified, returns a list describing all of
@@ -679,7 +679,7 @@ gives the new value for the scale.
 When a new scale is created, it is given the following initial
 behavior by default:
 
-@table @asis{}
+@table @asis
 @item @b{<Enter>}
 Change the slider display to use @b{activeForeground} instead of
 @b{sliderForeground}.
@@ -721,7 +721,7 @@ insertBackground insertWidth       selectForeground
 @unnumberedsubsec Arguments for Canvas
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:closeenough}}
 @flushright
 Name=@code{"@b{closeEnough}@r{"} Class=@code{"}@b{CloseEnough}"}
@@ -734,7 +734,7 @@ Defaults to 1.0.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:confine}}
 @flushright
 Name=@code{"@b{confine}@r{"} Class=@code{"}@b{Confine}"}
@@ -749,7 +749,7 @@ be constrained within the scroll region.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:height}}
 @flushright
 Name=@code{"@b{height}@r{"} Class=@code{"}@b{Height}"}
@@ -762,7 +762,7 @@ of the forms described in the COORDINATES section below.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:scrollincrement}}
 @flushright
 Name=@code{"@b{scrollIncrement}@r{"} Class=@code{"}@b{ScrollIncrement}"}
@@ -776,7 +776,7 @@ of the forms described in the COORDINATES section below.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:scrollregion}}
 @flushright
 Name=@code{"@b{scrollRegion}@r{"} Class=@code{"}@b{ScrollRegion}"}
@@ -792,7 +792,7 @@ in any of the forms given in the COORDINATES section below.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{width}"}
@@ -932,7 +932,7 @@ Note that it is possible to refer to the character just after
 the last one in the text item;  this is necessary for such
 tasks as inserting new text at the end of the item.
 
-@table @asis{}
+@table @asis
 @item @i{number}
 A decimal number giving the position of the desired character
 within the text item.
@@ -977,7 +977,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.
 The following widget commands are possible for canvas widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:addtag }@i{tag searchSpec }@r{?}@i{arg arg ...}?
 For each item that meets the constraints specified by
 @i{searchSpec}@r{ and the }@i{arg}s, add
@@ -990,7 +990,7 @@ This command returns an empty string as result.
 @i{SearchSpec}@r{ and }@i{arg}'s may take any of the following
 forms:
 
-@table @asis{}
+@table @asis
 @item @b{above }@i{tagOrId}
 Selects the item just after (above) the one given by @i{tagOrId}
 in the display list.
@@ -1097,7 +1097,7 @@ If a binding is associated with the tag @b{all}, the binding
 will have lower priority than all other bindings associated
 with the item.
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:canvasx }@i{screenx}@r{ ?}@i{gridspacing}?
 Given a screen x-coordinate @i{screenx} this command returns
 the canvas x-coordinate that is displayed at that location.
@@ -1194,7 +1194,7 @@ In most cases it is advisable to follow the @b{focus} widget
 command with the @b{focus} command to set the focus window to
 the canvas (if it wasn't there already).
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:gettags}@r{ }@i{tagOrId}
 Return a list whose elements are the tags associated with the
 item given by @i{tagOrId}.
@@ -1278,7 +1278,7 @@ The @i{option}\-@i{value} argument pairs provide additional
 information to control the generation of Postscript.  The following
 options are supported:
 
-@table @asis{}
+@table @asis
 @item @b{:colormap }@i{varName}
 @i{VarName} must be the name of a global array variable
 that specifies a color mapping to use in the Postscript.
@@ -1407,7 +1407,7 @@ This command returns an empty string.
 This command is used to implement scanning on canvases.  It has
 two forms, depending on @i{option}:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:scan :mark }@i{x y}
 Records @i{x}@r{ and }@i{y} and the canvas's current view;  used
 in conjunction with later @b{scan dragto} commands.
@@ -1436,7 +1436,7 @@ these that supports indexing and the selection is used.
 @i{Index} gives a textual description of a position
 within @i{tagOrId}, as described in INDICES above.
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:select :adjust }@i{tagOrId index}
 Locate the end of the selection in @i{tagOrId} nearest
 to the character given by @i{index}, and adjust that
@@ -1532,7 +1532,7 @@ by the @b{:start}@r{ and }@b{:extent} options) and displayed in
 one of several ways (specified by the @b{:style} option).
 Arcs are created with widget commands of the following form:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:create arc }@i{x1 y1 x2 y2 }@r{?}@i{option value option value ...}?
 The arguments @i{x1}@r{, }@i{y1}@r{, }@i{x2}@r{, and }@i{y2} give
 the coordinates of two diagonally opposite corners of a
@@ -1544,7 +1544,7 @@ used in @b{itemconfigure} widget commands to change the item's
 configuration.
 The following options are supported for arcs:
 
-@table @asis{}
+@table @asis
 @item @b{:extent }@i{degrees}
 Specifies the size of the angular range occupied by the arc.
 The arc's range extends for @i{degrees} degrees counter-clockwise
@@ -1608,7 +1608,7 @@ Items of type @b{bitmap} appear on the display as images with
 two colors, foreground and background.
 Bitmaps are created with widget commands of the following form:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:create bitmap }@i{x y }@r{?}@i{option value option value ...}?
 The arguments @i{x}@r{ and }@i{y} specify the coordinates of a
 point used to position the bitmap on the display (see the @b{:anchor}
@@ -1620,7 +1620,7 @@ used in @b{itemconfigure} widget commands to change the item's
 configuration.
 The following options are supported for bitmaps:
 
-@table @asis{}
+@table @asis
 @item @b{:anchor }@i{anchorPos}
 @i{AnchorPos} tells how to position the bitmap relative to the
 positioning point for the item;  it may have any of the forms
@@ -1656,7 +1656,7 @@ Items of type @b{line} appear on the display as one or more connected
 line segments or curves.
 Lines are created with widget commands of the following form:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:create line }@i{x1 y1... xn yn }@r{?}@i{option value option value ...}?
 
 The arguments @i{x1}@r{ through }@i{yn} give
@@ -1669,7 +1669,7 @@ used in @b{itemconfigure} widget commands to change the item's
 configuration.
 The following options are supported for lines:
 
-@table @asis{}
+@table @asis
 @item @b{:arrow }@i{where}
 Indicates whether or not arrowheads are to be drawn at one or both
 ends of the line.
@@ -1747,7 +1747,7 @@ the display.  Each oval may have an outline, a fill, or
 both.  Ovals are created with widget commands of the
 following form:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:create oval }@i{x1 y1 x2 y2 }@r{?}@i{option value option value ...}?
 
 The arguments @i{x1}@r{, }@i{y1}@r{, }@i{x2}@r{, and }@i{y2} give
@@ -1764,7 +1764,7 @@ used in @b{itemconfigure} widget commands to change the item's
 configuration.
 The following options are supported for ovals:
 
-@table @asis{}
+@table @asis
 @item @b{:fill }@i{color}
 Fill the area of the oval with @i{color}.
 @i{Color}@r{ may have any of the forms accepted by }@b{Tk_GetColor}.
@@ -1805,7 +1805,7 @@ Items of type @b{polygon} appear as polygonal or curved filled regions
 on the display.
 Polygons are created with widget commands of the following form:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:create polygon }@i{x1 y1 ... xn yn }@r{?}@i{option value option value ...}?
 
 
@@ -1820,7 +1820,7 @@ used in @b{itemconfigure} widget commands to change the item's
 configuration.
 The following options are supported for polygons:
 
-@table @asis{}
+@table @asis
 @item @b{:fill }@i{color}
 @i{Color} specifies a color to use for filling the area of the
 polygon; it may have any of the forms acceptable to @b{Tk_GetColor}.
@@ -1860,7 +1860,7 @@ the display.  Each rectangle may have an outline, a fill, or
 both.  Rectangles are created with widget commands of the
 following form:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:create rectangle }@i{x1 y1 x2 y2 }@r{?}@i{option value option value ...}?
 
 The arguments @i{x1}@r{, }@i{y1}@r{, }@i{x2}@r{, and }@i{y2} give
@@ -1874,7 +1874,7 @@ used in @b{itemconfigure} widget commands to change the item's
 configuration.
 The following options are supported for rectangles:
 
-@table @asis{}
+@table @asis
 @item @b{:fill }@i{color}
 Fill the area of the rectangle with @i{color}, which may be
 specified in any of the forms accepted by @b{Tk_GetColor}.
@@ -1920,7 +1920,7 @@ following text-related canvas widget commands:  @b{dchars},
 Text items are created with widget commands of the following
 form:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:create text }@i{x y }@r{?}@i{option value option value ...}?
 
 The arguments @i{x}@r{ and }@i{y} specify the coordinates of a
@@ -1933,7 +1933,7 @@ used in @b{itemconfigure} widget commands to change the item's
 configuration.
 The following options are supported for text items:
 
-@table @asis{}
+@table @asis
 @item @b{:anchor }@i{anchorPos}
 @i{AnchorPos} tells how to position the text relative to the
 positioning point for the text;  it may have any of the forms
@@ -2010,7 +2010,7 @@ used in @b{itemconfigure} widget commands to change the item's
 configuration.
 The following options are supported for window items:
 
-@table @asis{}
+@table @asis
 @item @b{:anchor }@i{anchorPos}
 @i{AnchorPos} tells how to position the window relative to the
 positioning point for the item;  it may have any of the forms
@@ -2089,7 +2089,7 @@ activeForeground       cursor           foreground
 @unnumberedsubsec Arguments for Menu
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:postcommand}}
 @flushright
 Name=@code{"@b{postCommand}@r{"} Class=@code{"}@b{Command}"}
@@ -2102,7 +2102,7 @@ widget command before posting the menu.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:selector}}
 @flushright
 Name=@code{"@b{selector}@r{"} Class=@code{"}@b{Foreground}"}
@@ -2230,7 +2230,7 @@ the cascade entry, in order for menu traversal to work correctly.
 A cascade entry posts its associated menu by invoking a
 Tcl command of the form
 
-@table @asis{}
+@table @asis
 @item @i{menu}@b{ :post }@i{x y}
 
 
@@ -2257,7 +2257,7 @@ name is @i{pathName}.  This
 command may be used to invoke various
 operations on the widget.  It has the following general form:
 
-@table @asis{}
+@table @asis
 @item @i{pathName option }@r{?}@i{arg arg ...}?
 @i{Option}@r{ and the }@i{arg}s
 determine the exact behavior of the command.
@@ -2268,7 +2268,7 @@ indicator of which entry of the menu to operate on.  These
 indicators are called @i{index}es and may be specified in
 any of the following forms:
 
-@table @asis{}
+@table @asis
 @item @i{number}
 Specifies the entry numerically, where 0 corresponds
 to the top-most entry of the menu, 1 to the entry below it, and
@@ -2315,7 +2315,7 @@ is given by @i{type}@r{ and must be one of }@b{cascade},
 or a unique abbreviation of one of the above.  If additional arguments
 are present, they specify any of the following options:
 
-@table @asis{}
+@table @asis
 @item @b{:activebackground }@i{value}
 Specifies a background color to use for displaying this entry when it
 is active.
@@ -2402,7 +2402,7 @@ causes the currently-selected entry to deselect itself.
 The @b{add} widget command returns an empty string.
 
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:configure}@r{ ?}@i{option}@r{? ?}@i{value option value ...}?
 Query or modify the configuration options of the widget.
 If no @i{option} is specified, returns a list describing all of
@@ -2482,7 +2482,7 @@ window of the topmost pixel in the entry specified by @i{index}.
 
 Tk automatically creates class bindings for menus that give them
 the following default behavior:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 When the mouse cursor enters a menu, the entry underneath the mouse
@@ -2537,7 +2537,7 @@ borderWidth            orient           repeatInterval
 @unnumberedsubsec Arguments for Scrollbar
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:command}}
 @flushright
 Name=@code{"@b{command}@r{"} Class=@code{"}@b{Command}"}
@@ -2553,7 +2553,7 @@ should appear at the top of the associated window.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -2611,7 +2611,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.  The following
 commands are possible for scrollbar widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:configure}@r{ ?}@i{option}@r{? ?}@i{value option value ...}?
 Query or modify the configuration options of the widget.
 If no @i{option} is specified, returns a list describing all of
@@ -2659,7 +2659,7 @@ between the arrow and the slider), the slider, the bottom gap,
 and the bottom arrow.  Pressing mouse button 1 in each area has
 a different effect:
 
-@table @asis{}
+@table @asis
 @item @b{top arrow}
 Causes the view in the associated window to shift up by one unit
 (i.e. the object appears to move down one unit in its window).
@@ -2719,7 +2719,7 @@ background        disabledForeground  padY
 @unnumberedsubsec Arguments for Checkbutton
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:command}}
 @flushright
 Name=@code{"@b{command}@r{"} Class=@code{"}@b{Command}"}
@@ -2733,7 +2733,7 @@ be updated before the command is invoked.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:height}}
 @flushright
 Name=@code{"@b{height}@r{"} Class=@code{"}@b{Height}"}
@@ -2749,7 +2749,7 @@ from the size of the bitmap or text being displayed in it.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:offvalue}}
 @flushright
 Name=@code{"@b{offValue}@r{"} Class=@code{"}@b{Value}"}
@@ -2761,7 +2761,7 @@ this button is deselected.  Defaults to ``0''.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:onvalue}}
 @flushright
 Name=@code{"@b{onValue}@r{"} Class=@code{"}@b{Value}"}
@@ -2773,7 +2773,7 @@ this button is selected.  Defaults to ``1''.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:selector}}
 @flushright
 Name=@code{"@b{selector}@r{"} Class=@code{"}@b{Foreground}"}
@@ -2787,7 +2787,7 @@ drawn for the button.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:state}}
 @flushright
 Name=@code{"@b{state}@r{"} Class=@code{"}@b{State}"}
@@ -2806,7 +2806,7 @@ button presses.  In this state the @b{disabledForeground} and
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:variable}}
 @flushright
 Name=@code{"@b{variable}@r{"} Class=@code{"}@b{Variable}"}
@@ -2820,7 +2820,7 @@ window's path name).
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -2892,7 +2892,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.  The following
 commands are possible for check button widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:activate}
 Change the check button's state to @b{active} and redisplay the button
 using its active foreground and background colors instead of normal
@@ -2949,7 +2949,7 @@ modifying its associated variable to reflect the new state.
 
 Tk automatically creates class bindings for check buttons that give them
 the following default behavior:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 The check button activates whenever the mouse passes over it and deactivates
@@ -2998,7 +2998,7 @@ background        disabledForeground  padY        underline
 @unnumberedsubsec Arguments for Menubutton
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:height}}
 @flushright
 Name=@code{"@b{height}@r{"} Class=@code{"}@b{Height}"}
@@ -3014,7 +3014,7 @@ from the size of the bitmap or text being displayed in it.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:menu}}
 @flushright
 Name=@code{"@b{menu}@r{"} Class=@code{"}@b{MenuName}"}
@@ -3027,7 +3027,7 @@ operation to work via the mouse.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:state}}
 @flushright
 Name=@code{"@b{state}@r{"} Class=@code{"}@b{State}"}
@@ -3046,7 +3046,7 @@ button presses.  In this state the @b{disabledForeground} and
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -3109,7 +3109,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.  The following
 commands are possible for menubutton widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:activate}
 Change the menu button's state to @b{active} and redisplay the menu
 button using its active foreground and background colors instead of normal
@@ -3145,7 +3145,7 @@ use ``@i{pathName }@b{:configure :state normal}'' instead.
 
 Tk automatically creates class bindings for menu buttons that give them
 the following default behavior:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 A menu button activates whenever the mouse passes over it and deactivates
@@ -3216,7 +3216,7 @@ font            insertOnTime      selectBackground
 @unnumberedsubsec Arguments for Text
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:height}}
 @flushright
 Name=@code{"@b{height}@r{"} Class=@code{"}@b{Height}"}
@@ -3228,7 +3228,7 @@ Must be at least one.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:state}}
 @flushright
 Name=@code{"@b{state}@r{"} Class=@code{"}@b{State}"}
@@ -3242,7 +3242,7 @@ in the widget.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -3256,7 +3256,7 @@ screen units.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:wrap}}
 @flushright
 Name=@code{"@b{wrap}@r{"} Class=@code{"}@b{Wrap}"}
@@ -3328,7 +3328,7 @@ but the @i{modifier}s are optional.
 
 The @i{base} for an index must have one of the following forms:
 
-@table @asis{}
+@table @asis
 @item @i{line}@b{.}@i{char}
 Indicates @i{char}@r{'th character on line }@i{line}.
 Lines are numbered from 1 for consistency with other UNIX programs
@@ -3359,7 +3359,7 @@ If modifiers follow the base index, each one of them must have one
 of the forms listed below.  Keywords such as @b{chars}@r{ and }@b{wordend}
 may be abbreviated as long as the abbreviation is unambiguous.
 
-@table @asis{}
+@table @asis
 @item @b{+ }@i{count}@b{ chars}
 Adjust the index forward by @i{count} characters, moving to later
 lines in the text if necessary.  If there are fewer than @i{count}
@@ -3443,7 +3443,7 @@ If a character has been tagged, then the display options associated
 with the tag override the default display style.
 The following options are currently supported for tags:
 
-@table @asis{}
+@table @asis
 @item @b{:background }@i{color}
 @i{Color} specifies the background color to use for characters
 associated with the tag.
@@ -3560,7 +3560,7 @@ Text widgets support the standard X selection.
 Selection support is implemented via tags.
 If the @b{exportSelection} option for the text widget is true
 then the @b{sel} tag will be associated with the selection:
-@itemize  @asis{}
+@itemize  @asis
 @item
 [1]
 Whenever characters are tagged with @b{sel} the text widget
@@ -3612,7 +3612,7 @@ the text widget's path name.  @i{Option}@r{ and the }@i{arg}s
 determine the exact behavior of the command.  The following
 commands are possible for text widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:compare}@r{ }@i{index1 op index2}
 Compares the indices given by @i{index1}@r{ and }@i{index2} according
 to the relational operator given by @i{op}, and returns 1 if
@@ -3688,7 +3688,7 @@ This command is used to manipulate marks.  The exact behavior of
 the command depends on the @i{option} argument that follows
 the @b{mark} argument.  The following forms of the command
 are currently supported:
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:mark :names}
 Returns a list whose elements are the names of all the marks that
 are currently set.
@@ -3708,7 +3708,7 @@ This command returns an empty string.
 @item @i{pathName }@b{:scan}@r{ }@i{option args}
 This command is used to implement scanning on texts.  It has
 two forms, depending on @i{option}:
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:scan :mark }@i{y}
 Records @i{y} and the current view in the text window;  used in
 conjunction with later @b{scan dragto} commands.  Typically this
@@ -3730,7 +3730,7 @@ command depends on the @i{option} argument that follows the
 @b{tag} argument.  The following forms of the command are currently
 supported:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:tag :add }@i{tagName index1 }@r{?}@i{index2}?
 Associate the tag @i{tagName} with all of the characters starting
 with @i{index1} and ending just before
@@ -3892,7 +3892,7 @@ If the @b{:pickplace}@r{ option isn't specified then }@i{what} will
 appear at the top of the window.
 If @b{:pickplace} is specified then the widget chooses where
 @i{what} appears in the window:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 If @i{what} is already visible somewhere in the window then the
@@ -3920,7 +3920,7 @@ This command returns an empty string.
 
 Tk automatically creates class bindings for texts that give them
 the following default behavior:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 Pressing mouse button 1 in an text positions the insertion cursor
@@ -4021,7 +4021,7 @@ font            insertOnTime      selectBorderWidth
 @unnumberedsubsec Arguments for Entry
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:state}}
 @flushright
 Name=@code{"@b{state}@r{"} Class=@code{"}@b{State}"}
@@ -4035,7 +4035,7 @@ in the widget.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -4098,7 +4098,7 @@ Many of the widget commands for entries take one or more indices as
 arguments.  An index specifies a particular character in the entry's
 string, in any of the following ways:
 
-@table @asis{}
+@table @asis
 @item @i{number}
 Specifies the character as a numerical index, where 0 corresponds
 to the first character in the string.
@@ -4129,7 +4129,7 @@ rounded to the nearest legal value.
 
 The following commands are possible for entry widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:configure}@r{ ?}@i{option}@r{? ?}@i{value option value ...}?
 Query or modify the configuration options of the widget.
 If no @i{option} is specified, returns a list describing all of
@@ -4162,7 +4162,7 @@ indicated by @i{index}.  Returns an empty string.
 @item @i{pathName }@b{:scan}@r{ }@i{option args}
 This command is used to implement scanning on entries.  It has
 two forms, depending on @i{option}:
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:scan :mark }@i{x}
 Records @i{x} and the current view in the entry window;  used in
 conjunction with later @b{scan dragto} commands.  Typically this
@@ -4180,7 +4180,7 @@ value is an empty string.
 @item @i{pathName }@b{:select }@i{option arg}
 This command is used to adjust the selection within an entry.  It
 has several forms, depending on @i{option}:
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:select :adjust }@i{index}
 Locate the end of the selection nearest to the character given by
 @i{index}@r{, and adjust that end of the selection to be at }@i{index}
@@ -4217,7 +4217,7 @@ at the left edge of the window.  Returns an empty string.
 Tk automatically creates class bindings for entries that give them
 the following default behavior:
 
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 Clicking mouse button 1 in an entry positions the insertion cursor
@@ -4290,7 +4290,7 @@ borderWidth       foreground      relief      width
 @unnumberedsubsec Arguments for Message
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:aspect}}
 @flushright
 Name=@code{"@b{aspect}@r{"} Class=@code{"}@b{Aspect}"}
@@ -4309,7 +4309,7 @@ Defaults to 150.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:justify}}
 @flushright
 Name=@code{"@b{justify}@r{"} Class=@code{"}@b{Justify}"}
@@ -4338,7 +4338,7 @@ in the vertical span of the window.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -4408,7 +4408,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.  The following
 commands are possible for message widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:configure}@r{ ?}@i{option}@r{? ?}@i{value option value ...}?
 Query or modify the configuration options of the widget.
 If no @i{option} is specified, returns a list describing all of
@@ -4456,7 +4456,7 @@ borderWidth            geometry
 @unnumberedsubsec Arguments for Frame
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:height}}
 @flushright
 Name=@code{"@b{height}@r{"} Class=@code{"}@b{Height}"}
@@ -4473,7 +4473,7 @@ all.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -4535,7 +4535,7 @@ the frame widget's path name.  @i{Option}@r{ and the }@i{arg}s
 determine the exact behavior of the command.  The following
 commands are possible for frame widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:configure}@r{ ?}@i{option}@r{? }@i{?value option value ...}?
 Query or modify the configuration options of the widget.
 If no @i{option} is specified, returns a list describing all of
@@ -4579,7 +4579,7 @@ bitmap           font            padY           textVariable
 @unnumberedsubsec Arguments for Label
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:height}}
 @flushright
 Name=@code{"@b{height}@r{"} Class=@code{"}@b{Height}"}
@@ -4595,7 +4595,7 @@ from the size of the bitmap or text being displayed in it.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -4644,7 +4644,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.  The following
 commands are possible for label widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:configure}@r{ ?}@i{option}@r{? ?}@i{value option value ...}?
 Query or modify the configuration options of the widget.
 If no @i{option} is specified, returns a list describing all of
@@ -4689,7 +4689,7 @@ background        disabledForeground  padX
 @unnumberedsubsec Arguments for Radiobutton
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:command}}
 @flushright
 Name=@code{"@b{command}@r{"} Class=@code{"}@b{Command}"}
@@ -4703,7 +4703,7 @@ be updated before the command is invoked.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:height}}
 @flushright
 Name=@code{"@b{height}@r{"} Class=@code{"}@b{Height}"}
@@ -4719,7 +4719,7 @@ from the size of the bitmap or text being displayed in it.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:selector}}
 @flushright
 Name=@code{"@b{selector}@r{"} Class=@code{"}@b{Foreground}"}
@@ -4732,7 +4732,7 @@ If specified as an empty string then no selector is drawn for the button.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:state}}
 @flushright
 Name=@code{"@b{state}@r{"} Class=@code{"}@b{State}"}
@@ -4751,7 +4751,7 @@ button presses.  In this state the @b{disabledForeground} and
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:value}}
 @flushright
 Name=@code{"@b{value}@r{"} Class=@code{"}@b{Value}"}
@@ -4763,7 +4763,7 @@ this button is selected.  Defaults to the name of the radio button.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:variable}}
 @flushright
 Name=@code{"@b{variable}@r{"} Class=@code{"}@b{Variable}"}
@@ -4777,7 +4777,7 @@ Defaults to the value @b{selectedButton}.
 @end table
 
 
-@table @asis{}
+@table @asis
 @item @code{@b{:width}}
 @flushright
 Name=@code{"@b{width}@r{"} Class=@code{"}@b{Width}"}
@@ -4853,7 +4853,7 @@ operations on the widget.  It has the following general form:
 determine the exact behavior of the command.  The following
 commands are possible for radio-button widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:activate}
 Change the radio button's state to @b{active} and redisplay the button
 using its active foreground and background colors instead of normal
@@ -4908,7 +4908,7 @@ to this widget.
 
 Tk automatically creates class bindings for radio buttons that give them
 the following default behavior:
-@itemize @asis{}
+@itemize @asis
 @item
 [1]
 The radio button activates whenever the mouse passes over it and deactivates
@@ -5008,7 +5008,7 @@ the toplevel widget's path name.  @i{Option}@r{ and the }@i{arg}s
 determine the exact behavior of the command.  The following
 commands are possible for toplevel widgets:
 
-@table @asis{}
+@table @asis
 @item @i{pathName }@b{:configure}@r{ ?}@i{option}@r{? ?}@i{value option value ...}?
 Query or modify the configuration options of the widget.
 If no @i{option} is specified, returns a list describing all of
index 5ce1f24f267177106639214c2fa3aa9351932a12..a4718ed2db3ff64e7b55129dcd3d259782b0ed3a 100644 (file)
@@ -2,11 +2,13 @@
 (in-package :fpe)
 
 (import 'si::(disassemble-instruction feenableexcept fedisableexcept fld *fixnum *float *double
+                                     fetestexcept feclearexcept
                                      *fixnum *ushort *uint fun-name
                                      si-class-direct-subclasses si-class-name si-find-class
                                      +fe-list+ +mc-context-offsets+ floating-point-error 
                                      function-by-address clines defentry))
 (export '(break-on-floating-point-exceptions read-instruction))
+#+no-sigfpe (export '(flush-floating-point-exceptions))
 
 (eval-when
     (eval compile)
   (feenableexcept a))
 
 
-#.`(let ((fpe-enabled 0))
+#.`(let ((fpe-enabled 0)(fpe-set 0))
+     #+no-sigfpe
+     (defun flush-floating-point-exceptions nil
+       (let ((x (fetestexcept fpe-set)))
+        (unless (zerop x)
+          (feclearexcept x)
+          (floating-point-error x 0 0))))
      (defun break-on-floating-point-exceptions 
-       (&key suspend ,@(mapcar (lambda (x) `(,(car x) (logtest ,(caddr x) fpe-enabled))) +fe-list+) &aux r)
+        (&key suspend no-flush
+           ,@(mapcar (lambda (x) `(,(car x) (logtest ,(caddr x) fpe-enabled))) +fe-list+)
+         &aux r #+no-sigfpe(x (fetestexcept fpe-set)))
        (fe-enable
-       (if suspend 0
-         (setq fpe-enabled 
-               (logior
-                ,@(mapcar (lambda (x)
-                            `(cond (,(car x) (push ,(intern (symbol-name (car x)) :keyword) r) ,(caddr x))
-                                   (0)))
-                          +fe-list+)))))
+       (setq fpe-set
+             (if suspend 0
+                 (setq fpe-enabled
+                       (logior
+                        ,@(mapcar (lambda (x)
+                                    `(cond (,(car x)
+                                            (push ,(intern (symbol-name (car x)) :keyword) r)
+                                             ,(caddr x))
+                                           (0)))
+                                  +fe-list+))))))
+       #+no-sigfpe
+       (unless (or no-flush (zerop x)) (floating-point-error x 0 0))
        r))
 
 (defun subclasses (class)
       'arithmetic-error))
         
 (defun floating-point-error (code addr context)
-  (break-on-floating-point-exceptions :suspend t)
+  (break-on-floating-point-exceptions :suspend t :no-flush t)
   (restart-case
    (unwind-protect
        (let* ((fun (function-by-address addr))(m (read-instruction addr context)))
         ((lambda (&rest r) (apply 'error (if (find-package :conditions) r (list (format nil "~s" r)))))
          (code-condition code)
          :operation (list :insn (pop m) :op (pop m) :fun fun :addr addr) :operands m :function-name (when fun (fun-name fun))))
-     (break-on-floating-point-exceptions))
+     (break-on-floating-point-exceptions :no-flush t))
    (continue nil :report (lambda (s) (format s "Continue disabling floating point exception trapping"))
-            (apply 'break-on-floating-point-exceptions (mapcan (lambda (x) (list x nil)) (break-on-floating-point-exceptions))))))
+            (apply 'break-on-floating-point-exceptions
+                   :no-flush t
+                   (mapcan (lambda (x) (list x nil))
+                           (break-on-floating-point-exceptions :no-flush t))))))
index 636b192fc1add12b5ec4b00957228be25f1977da..32056ada0d0702b66ab0b1ca69ec12bdca7cbc59 100644 (file)
 (defun concatenated-stream-streams (stream)
   (declare (optimize (safety 2)))
   (check-type stream concatenated-stream)
-  (c-stream-object0 stream))
+  (the proper-list (c-stream-object0 stream)))
 (defun broadcast-stream-streams (stream)
   (declare (optimize (safety 2)))
   (check-type stream broadcast-stream)
-  (c-stream-object0 stream))
+  (the proper-list (c-stream-object0 stream)))
 (defun two-way-stream-input-stream (stream)
   (declare (optimize (safety 2)))
   (check-type stream two-way-stream)
-  (c-stream-object0 stream))
+  (the (and stream (satisfies input-stream-p)) (c-stream-object0 stream)))
 (defun echo-stream-input-stream (stream)
   (declare (optimize (safety 2)))
   (check-type stream echo-stream)
-  (c-stream-object0 stream))
+  (the (and stream (satisfies input-stream-p)) (c-stream-object0 stream)))
 (defun two-way-stream-output-stream (stream)
   (declare (optimize (safety 2)))
   (check-type stream two-way-stream)
-  (c-stream-object1 stream))
+  (the (and stream (satisfies output-stream-p)) (c-stream-object1 stream)))
 (defun echo-stream-output-stream (stream)
   (declare (optimize (safety 2)))
   (check-type stream echo-stream)
-  (c-stream-object1 stream))
+  (the (and stream (satisfies output-stream-p)) (c-stream-object1 stream)))
 (defun synonym-stream-symbol (stream)
   (declare (optimize (safety 2)))
   (check-type stream synonym-stream)
-  (c-stream-object0 stream))
+  (the symbol (c-stream-object0 stream)))
 
 (defun maybe-clear-input (&optional (x *standard-input*))
   (typecase x
 (defun get-output-stream-string (strm)
   (declare (optimize (safety 1)))
   (check-type strm string-output-stream)
-  (let ((x (copy-seq (c-stream-object0 strm))))
+  (let ((x (copy-seq (the string (c-stream-object0 strm)))))
     (c-set-stream-int strm 0)
     (setf (fill-pointer (c-stream-object0 strm)) 0)
     x))
 (deftype binary-stream-element-type nil 'list)
 (defconstant +char-shft+ (1- (integer-length char-length)))
 
+(declaim (inline byte-index))
+(defun byte-index (k n)
+  #+:clx-little-endian k #-:clx-little-endian (- n 1 k))
+
 (defun read-byte (s &optional (eof-error-p t) eof-value &aux (i 0)(tp (stream-element-type s)))
   (declare (optimize (safety 1)))
   (check-type s stream)
   (let* ((n (if tp (ash (cadr tp) (- +char-shft+)) 1)))
     (dotimes (k n (let ((nb (ash n +char-shft+)))
                  (if (when (eq (car tp) 'signed-byte) (logbitp (1- nb) i)) (- i (ash 1 nb)) i)))
-      (setq i (logior i (ash (let ((ch (read-char s eof-error-p eof-value)))
+      (setq i
+           (logior i
+                   (ash (let ((ch (read-char s eof-error-p eof-value)))
                               (if (eq ch eof-value) (return ch) (char-code ch)))
-                            (ash k +char-shft+)))))))
+                        (ash (byte-index k n) +char-shft+)))))))
 
 (defun write-byte (j s &aux (i j) (tp (stream-element-type s)))
   (declare (optimize (safety 1)))
   (check-type tp binary-stream-element-type)
   (let ((n (ash (cadr tp) (- +char-shft+))))
     (dotimes (k n j)
-      (write-char (code-char (logand i #.(1- (ash 1 char-length)))) s)
-      (setq i (ash i #.(- char-length))))))
+      (write-char
+       (code-char
+       (logand
+        (ash i (ash (- (byte-index k n)) +char-shft+))
+        #.(1- (ash 1 char-length))))
+       s))))
 
 #-pre-gcl
 (defdlfun (:fixnum "fread") :fixnum :fixnum :fixnum :fixnum)
 
-(defun read-sequence-using-fread (seq strm tp start end &aux (fp (stream-fp strm nil)))
-  #+pre-gcl
-  (declare (ignore seq tp start end fp))
-  #-pre-gcl
-  (when fp
-    (when (eq tp (aref +array-stream-types+ (c-array-elttype seq)))
-      (let* ((n (ash 1 (1- (c-array-eltsize seq))))(ln (length seq))(end (or end ln)))
-       (when (<= start end ln)
-         (c+ start
-             (|libc|:|fread|
-                    (c+ (c-array-self seq) (c* n start)) n (c- end start) fp)))))))
+#.`(defun read-sequence-using-fread (seq strm tp start end &aux (fp (stream-fp strm nil)))
+     #+pre-gcl
+     (declare (ignore seq tp start end fp))
+     #-pre-gcl
+     (when fp
+       (when (eq tp (aref +array-stream-types+ (c-array-elttype seq)))
+        (let* ((n (ash 1 (1- (c-array-eltsize seq))))(ln (length seq))(end (or end ln)))
+          (when (<= start end ln)
+            (c+ start
+                (,(mdlsym "fread")
+                  (c+ (c-array-self seq) (c* n start)) n (c- end start) fp)))))))
 
 
 
 #-pre-gcl
 (defdlfun (:fixnum "fwrite") :fixnum :fixnum :fixnum :fixnum)
 
-(defun write-sequence-using-fwrite (seq strm tp start end &aux (fp (stream-fp strm t)))
-  #+pre-gcl
-  (declare (ignore seq tp start end fp))
-  #-pre-gcl
-  (when fp
-    (when (eq tp (aref +array-stream-types+ (c-array-elttype seq)))
-      (let* ((n (ash 1 (1- (c-array-eltsize seq))))(ln (length seq))(end (or end ln)))
-       (when (<= start end ln)
-         (c+ start
-             (|libc|:|fwrite|
-                    (c+ (c-array-self seq) (c* n start)) n (c- end start) fp)))))))
+#.`(defun write-sequence-using-fwrite (seq strm tp start end &aux (fp (stream-fp strm t)))
+     #+pre-gcl
+     (declare (ignore seq tp start end fp))
+     #-pre-gcl
+     (when fp
+       (when (eq tp (aref +array-stream-types+ (c-array-elttype seq)))
+        (let* ((n (ash 1 (1- (c-array-eltsize seq))))(ln (length seq))(end (or end ln)))
+          (when (<= start end ln)
+            (c+ start
+                (,(mdlsym "fwrite")
+                  (c+ (c-array-self seq) (c* n start)) n (c- end start) fp)))))))
 
 
 (defun write-sequence (seq strm &key (start 0) end
index 9b252ac6463cf642d17c7cec23c92d2908bb5d02..743b65528f6c3afff4edfd9375fc9c86c88917d8 100644 (file)
--- a/o/alloc.c
+++ b/o/alloc.c
@@ -1290,7 +1290,31 @@ gcl_init_alloc(void *cs_start) {
   
 #ifdef HAVE_MPROTECT
   if (data_start)
-    massert(!gcl_mprotect(data_start,(void *)core_end-data_start,PROT_READ|PROT_WRITE|PROT_EXEC));
+    massert(!gcl_mprotect(data_start,(void *)core_end-data_start,PROT_READ|PROT_WRITE
+#ifndef W_X
+                         |PROT_EXEC
+#endif
+                         ));
+
+#ifdef W_X
+  {
+    struct pageinfo *v;
+    struct typemanager *tm=tm_of(t_cfdata);
+
+
+    for (v=cell_list_head;v;v=v->next)
+    if (tm->tm_type==v->type) {
+      void *p;
+      ufixnum k;
+      for (p=pagetochar(page(v)),k=0;k<tm->tm_nppage;k++,p+=tm->tm_size) {
+       object o=p;
+       if (!is_free(o) && type_of(o)==t_cfdata && (void *)o->cfd.cfd_start>=data_start)
+         gcl_mprotect((void *)o->cfd.cfd_start,o->cfd.cfd_nexp<<PAGEWIDTH,PROT_READ|PROT_EXEC);
+      }
+    }
+  }
+#endif
+
 #endif
 
 #ifdef SGC
index 2648eebb581c86b4d8d29738426111ce25312861..66378f3ea62e17b5f64beb83076cde9725567f70 100644 (file)
@@ -616,6 +616,7 @@ gcl_init_or_load1(void (*fn)(void),const char *file) {
     massert(realpath(file,FN1));
     ltn=make_simple_string(FN1);
     memory=new_cfdata();
+    memory->d.tt=1;
     memory->cfd.cfd_name=ltn;
     memory->cfd.cfd_start=(char *)fn;
     faslfile=open_stream(ltn,smm_input,Cnil,sKerror);
index 5fbfdfeb122a87c5602b90b9104253893f04b342..d48aff90eabed9fdd8c61dc3db79e8c722b3ccea 100644 (file)
--- a/o/file.d
+++ b/o/file.d
@@ -1900,7 +1900,7 @@ DEFUN("SOCKET-INT",object,fSsocket_int,SI,7,7,NONE,OO,OO,OO,OO,
 
     massert(!sigaction(SIGCHLD,&sa,&osa));
 
-    switch((pid=pvfork())) {
+    switch((pid=pfork())) {
     case -1:
       FEerror("Cannot fork", 0);
       break;
@@ -1909,7 +1909,7 @@ DEFUN("SOCKET-INT",object,fSsocket_int,SI,7,7,NONE,OO,OO,OO,OO,
       massert(setsid()>=0);
 
       if (daemon == sKpersistent)
-       switch(pvfork()) {
+       switch(pfork()) {
        case -1:
          FEerror("daemon fork error", 0);
          break;
@@ -1952,7 +1952,7 @@ DEFUN("SOCKET-INT",object,fSsocket_int,SI,7,7,NONE,OO,OO,OO,OO,
          
          y=maccept(x);
          
-         switch((pid=pvfork())) {
+         switch((pid=pfork())) {
          case 0:
            massert(!sigaction(SIGCHLD,&osa,NULL));
            ifuncall1(server,y);
diff --git a/o/gbc.c b/o/gbc.c
index 2b7102463732533e955ae14397e046fcce121191..94761c6672631c207a775ccd097a52586d361d6f 100644 (file)
--- a/o/gbc.c
+++ b/o/gbc.c
@@ -31,6 +31,7 @@
 #define NEED_MP_H
 #include <string.h>
 #include <stdlib.h>
+#include <sys/mman.h>
 #include "include.h"
 #include "page.h"
 
@@ -957,6 +958,11 @@ sweep_phase(void) {
        continue;
       }
 
+#ifdef W_X
+      if (type_of(x)==t_cfdata && !x->d.tt && !is_free(x))
+       gcl_mprotect((void *)x->cfd.cfd_start,x->cfd.cfd_nexp<<PAGEWIDTH,PROT_READ|PROT_WRITE);
+#endif
+
       k++;
 
       make_free(x);
index a36fd99edfc3be0b3bbe8551e884c9707582453a..a38bdd90185503bf6bebd8f2c5c35a789df518a1 100644 (file)
--- a/o/gprof.c
+++ b/o/gprof.c
@@ -5,6 +5,14 @@
 
 static unsigned long gprof_on;
 
+/*all but this stub to be written in the future provided*/
+#if defined(__APPLE__) && defined(__aarch64__)
+void
+_mcleanup(void) {
+  return;
+}
+#endif
+
 DEFUN("MCLEANUP",object,fSmcleanup,SI,0,0,NONE,OO,OO,OO,OO,(void),"") {
 
   extern void _mcleanup(void);
index fa8a972364f2217fc26c477543a2c7a182a43311..d3d8c41ba602dfbd3f9895d0329c3eb604e15317 100644 (file)
--- a/o/hash.d
+++ b/o/hash.d
@@ -178,7 +178,7 @@ BEGIN:
   if (depth++<=3)
     switch ((tx=type_of(x))) {
     case t_cons:
-      h^=ihash_equal(x->c.c_car,depth)^rtb[labs(depth%(sizeof(rtb)/sizeof(*rtb)))];
+      h^=ihash_equal(x->c.c_car,depth)^rtb[labs(depth%(long)(sizeof(rtb)/sizeof(*rtb)))];
       x = x->c.c_cdr;
       goto BEGIN;
       break;
@@ -249,7 +249,7 @@ BEGIN:
   if (depth++ <=3)
     switch ((tx=type_of(x))) {
     case t_cons:
-      h += ihash_equalp(x->c.c_car,depth)^rtb[labs(depth%(sizeof(rtb)/sizeof(*rtb)))];
+      h += ihash_equalp(x->c.c_car,depth)^rtb[labs(depth%(long)(sizeof(rtb)/sizeof(*rtb)))];
       x = x->c.c_cdr;
       goto BEGIN;
       break;
index 799b8fbe102a90f92dbb240528d154893f59fa91..3b14a455758795b5e350ea8ec18c1e1d729aa92c 100644 (file)
--- a/o/main.c
+++ b/o/main.c
@@ -178,7 +178,65 @@ mbrk(void *v) {
   return uc==(ufixnum)sbrk(uv-uc) ? 0 : -1;
 
 }
-    
+
+#if defined(__CYGWIN__)||defined(__MINGW32__)
+
+#include <windows.h>
+
+static ufixnum
+get_phys_pages_no_malloc(char n,char ramp) {
+
+  MEMORYSTATUS m;
+
+  m.dwLength=sizeof(m);
+  GlobalMemoryStatus(&m);
+  return m.dwTotalPhys>>PAGEWIDTH;
+
+}
+
+#elif defined (DARWIN)
+
+#include <sys/sysctl.h>
+
+static ufixnum
+get_phys_pages_no_malloc(char n,char ramp) {
+
+  uint64_t s;
+  size_t z=sizeof(s);
+  int m[2]={CTL_HW,HW_MEMSIZE};
+
+  if (sysctl(m,2,&s,&z,NULL,0)==0)
+    return s>>PAGEWIDTH;
+
+  return 0;
+
+}
+
+#elif defined(__sun__)
+
+static ufixnum
+get_phys_pages_no_malloc(char n,char ramp) {
+
+  return sysconf(_SC_PHYS_PAGES);
+
+}
+
+#elif defined(FREEBSD)
+
+#include <sys/types.h>
+#include <sys/sysctl.h>
+
+static ufixnum
+get_phys_pages_no_malloc(char n,char ramp) {
+
+  size_t i,len=sizeof(i);
+
+  return (sysctlbyname("hw.physmem",&i,&len,NULL,0) ? 0 : i)>>PAGEWIDTH;
+
+}
+
+#else /*Linux*/
+
 static char *
 next_line(int l,ufixnum *s) {
 
@@ -240,65 +298,6 @@ parse_proc_meminfo(ufixnum *t,ufixnum *f,ufixnum *st,ufixnum *sf) {
 
 }
 
-
-#if defined(__CYGWIN__)||defined(__MINGW32__)
-
-#include <windows.h>
-
-static ufixnum
-get_phys_pages_no_malloc(char n,char ramp) {
-
-  MEMORYSTATUS m;
-
-  m.dwLength=sizeof(m);
-  GlobalMemoryStatus(&m);
-  return m.dwTotalPhys>>PAGEWIDTH;
-
-}
-
-#elif defined (DARWIN)
-
-#include <sys/sysctl.h>
-
-static ufixnum
-get_phys_pages_no_malloc(char n,char ramp) {
-
-  uint64_t s;
-  size_t z=sizeof(s);
-  int m[2]={CTL_HW,HW_MEMSIZE};
-
-  if (sysctl(m,2,&s,&z,NULL,0)==0)
-    return s>>PAGEWIDTH;
-
-  return 0;
-
-}
-
-#elif defined(__sun__)
-
-static ufixnum
-get_phys_pages_no_malloc(char n,char ramp) {
-
-  return sysconf(_SC_PHYS_PAGES);
-
-}
-
-#elif defined(FREEBSD)
-
-#include <sys/types.h>
-#include <sys/sysctl.h>
-
-static ufixnum
-get_phys_pages_no_malloc(char n,char ramp) {
-
-  size_t i,len=sizeof(i);
-
-  return (sysctlbyname("hw.physmem",&i,&len,NULL,0) ? 0 : i)>>PAGEWIDTH;
-
-}
-
-#else /*Linux*/
-
 static ufixnum
 get_phys_pages_no_malloc(char freep,char ramp) {
 
@@ -446,6 +445,13 @@ set_real_maxpage(void *beg) {
 
   mp=ufmin(mp,get_phys_pages1(0,0));
 
+#if defined(__APPLE__) && defined(__aarch64__)
+  {
+    extern unsigned long heap_vmsize;
+    mp=ufmin(mp,heap_vmsize>>PAGEWIDTH);
+  }
+#endif
+
   sz=ufmin(mem_bound,log_maxpage_bound);
   sz=(1UL<<sz)+((1UL<<sz)-1);
   mp=ufmin(mp,page(sz));
@@ -716,6 +722,10 @@ DEFUN("KCL-SELF",object,fSkcl_self,SI,0,0,NONE,OO,OO,OO,OO,(void),"") {
 
 }
 
+#if defined(__APPLE__) && defined(__aarch64__)
+#include "disable_mac_aslr.h"
+#endif
+
 int
 main(int argc, char **argv, char **envp) {
 
@@ -727,6 +737,10 @@ main(int argc, char **argv, char **envp) {
   bds_top = bds_org-1;
   frs_top = frs_org-1;
 
+#if defined(__APPLE__) && defined(__aarch64__)
+  disable_aslr(argc, argv, envp);
+#endif
+
 #include "cstack.h"
 
   gcl_init_alloc(alloca(1));
@@ -1408,6 +1422,10 @@ init_main(void) {
   ADD_FEATURE("LARGE-MEMORY-MODEL");
 #endif
 
+#ifdef ADDITIONAL_FEATURES
+  ADDITIONAL_FEATURES;
+#endif
+
   make_special("*FEATURES*",features);}
   
   make_si_function("SAVE-SYSTEM", siLsave_system);
index 08fcc2573dc051dac3186ca39433d85f6a288c78..f73f947b4a51b5e8a399947f8cf82a279461ea5a 100644 (file)
--- a/o/msbrk.c
+++ b/o/msbrk.c
@@ -21,7 +21,11 @@ msbrk_end(void) {
 
 static void *
 new_map(void *v,ufixnum s) {
-  return mmap(v,s,PROT_READ|PROT_WRITE|PROT_EXEC,MAP_PRIVATE|MAP_ANON|MAP_FIXED,-1,0);
+  return mmap(v,s,PROT_READ|PROT_WRITE
+#ifndef W_X
+             |PROT_EXEC
+#endif
+             ,MAP_PRIVATE|MAP_ANON|MAP_FIXED,-1,0);
 }
 
 #if defined(DARWIN)
@@ -29,7 +33,10 @@ new_map(void *v,ufixnum s) {
   but not so large that the Mac linker ignores the segment designation
   and creates a __huge section under __DATA for this and other
   variables.  We enlarge this on unexec.*/
-asm (".zerofill __HEAP,__heap,__end,0x70000000\n\t.globl __end");
+unsigned long heap_vmsize=INITIAL_HEAP_VMSIZE;
+#define mstr(a) #a
+#define Mstr(a) mstr(a)
+asm (".zerofill __HEAP,__heap,__end," Mstr(INITIAL_HEAP_VMSIZE) "\n\t.globl __end");
 #endif
 
 int
index a25f8c06c830aeefabc900447790038254663769..b08a240fbb2d9dd37bf75e2919c7c0c4e8562baf 100644 (file)
@@ -1,6 +1,15 @@
+#ifdef __APPLE__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
 #include "include.h"
 #include "arth.h"
 
+#ifdef __APPLE__
+#pragma clang diagnostic pop
+#endif
+
 #define EMPTY()
 #define DEFER(id) id EMPTY()
 
index c722a1b585f2feeff4b9b124cd424182a0766e47..41612f44591ec2496bbaec904b4711e626ae45ec 100644 (file)
@@ -544,43 +544,46 @@ make_socket_pair()
  * with "C" type streams.
  */
 
+#include <spawn.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+#ifdef __APPLE__
+#include <crt_externs.h>
+#define environ (*_NSGetEnviron())
+#else
+extern char **environ;
+#endif
+
 static void
 spawn_process_with_streams(object istream,object ostream,char *pname,char **argv) {
 
-  int fdin;
-  int fdout;
+  int fdin,fdout,spawn_err;
+  pid_t pid;
+  posix_spawn_file_actions_t actions;
 
-  if (istream->sm.sm_fp == NULL || ostream->sm.sm_fp == NULL)
-    FEerror("Cannot spawn process with given stream", 0);
+  massert(istream->sm.sm_fp&&ostream->sm.sm_fp);
 
   fdin = istream->sm.sm_int;
   fdout = ostream->sm.sm_int;
 
-  if (!pvfork()) {
+  massert(!posix_spawn_file_actions_init(&actions));
+  massert(!posix_spawn_file_actions_adddup2(&actions,fdin,0));
+  massert(!posix_spawn_file_actions_adddup2(&actions,fdout,1));
 
-    /* the child --- replace standard in and out with descriptors given */
-    close(0);
-    massert(dup(fdin)>=0);
-    close(1);
-    massert(dup(fdout)>=0);
+  massert(!posix_spawn_file_actions_addclose(&actions,fileno(istream->sm.sm_fp)));
+  massert(!posix_spawn_file_actions_addclose(&actions,fileno(ostream->sm.sm_fp)));
 
-    close(fileno(istream->sm.sm_fp));
-    close(fileno(ostream->sm.sm_fp));
+  spawn_err = posix_spawnp(&pid, pname, &actions, NULL, argv, environ);
 
-    errno=0;
-    execvp(pname,argv);
-    _exit(128|(errno&0x7f));
+  posix_spawn_file_actions_destroy(&actions);
 
-  } else {
-
-    close(fdin);
-    close(fdout);
-
-  }
+  massert(!spawn_err);
+  massert(!close(fdin));
+  massert(!close(fdout));
 
 }
-    
-      
+
 void
 run_process(char *filename,char **argv) {
 
index 23f9fb8ecd6f302ff8096bb14ca6bdc1cfc52518..cbd848290542d96d1ebe57155ec1b67faf9814ca 100644 (file)
@@ -129,6 +129,7 @@ LFD(build_symbol_table)(void) {
       min_text=p<min_text ? p : min_text;
     }
   }
+  massert(min_text);
 
 }
 
@@ -155,6 +156,11 @@ use_symbols(double d,...) {
     d=c/d;
     d=d/(c+I*d);
   }
+
+#if defined(__APPLE__) && defined(__aarch64__)/*FIXME non-lazy pointer support in sfaslmacho.c*/
+  extern  void __chkstk_darwin(void);
+  __chkstk_darwin();
+#endif
   
   return (int)d;
 
index cf2c64c220a047c0ce13e942c1fa93f0e4cc7093..cbf2c6ae9eb64535e4c863696c2cf87c4c84d499 100644 (file)
 #endif
 
 #define ALLOC_SEC(sec) ({ul _fl=sec->flags&SECTION_TYPE;\
-      _fl<=S_SYMBOL_STUBS || _fl==S_16BYTE_LITERALS;})
+      (_fl<=S_SYMBOL_STUBS || _fl==S_16BYTE_LITERALS) && !(sec->flags&S_ATTR_DEBUG);})
 
 #define LOAD_SEC(sec) ({ul _fl=sec->flags&SECTION_TYPE;\
-      (_fl<=S_SYMBOL_STUBS || _fl==S_16BYTE_LITERALS) && _fl!=S_ZEROFILL;})
+      (_fl<=S_SYMBOL_STUBS || _fl==S_16BYTE_LITERALS) && _fl!=S_ZEROFILL && !(sec->flags&S_ATTR_DEBUG);})
 
 
 #define MASK(n) (~(~0ULL << (n)))
@@ -44,10 +44,8 @@ typedef unsigned long ul;
 STATIC_RELOC_VARS
 #endif
 
-
-
 static int
-ovchk(ul v,ul m) {
+ovchks(ul v,ul m) {
 
   m|=m>>1;
   v&=m;
@@ -56,16 +54,56 @@ ovchk(ul v,ul m) {
 
 }
 
+static int
+ovchku(ul v,ul m) {
+
+  return !(v&=m);
+
+}
+
 static int
 store_val(ul *w,ul m,ul v) {
 
-  massert(ovchk(v,~m));
   *w=(v&m)|(*w&~m);
 
   return 0;
 
 }
 
+static int
+store_valu(ul *w,ul m,ul v) {
+
+  massert(ovchku(v,~m));
+  return store_val(w,m,v);
+
+  return 0;
+
+}
+
+static int
+store_vals(ul *w,ul m,ul v) {
+
+  massert(ovchks(v,~m));
+  return store_val(w,m,v);
+
+}
+
+#ifdef W_X
+static int
+add_vals(ul *w,ul m,ul v) {
+
+  return store_vals(w,m,v+(*w&m));
+
+}
+
+static int
+add_valu(ul *w,ul m,ul v) {
+
+  return store_valu(w,m,v+(*w&m));
+
+}
+#endif
+
 #ifndef _LP64
 /*redirect trampolines gcc-4.0 gives no reloc for stub sections on x86 only*/
 static int
@@ -102,13 +140,16 @@ relocate(struct relocation_info *ri,struct section *sec,
   struct scattered_relocation_info *sri=(void *)ri;
   ul *q=(void *)(sec->addr+(sri->r_scattered ? sri->r_address : ri->r_address));
   ul a,rel=(ul)(q+1);
+#ifdef W_X
+  static ul addend;
+#endif
 
   if (sri->r_scattered)
     a=sri->r_value;
   else if (ri->r_extern)
     a=n1[ri->r_symbolnum].n_value;
   else
-    a=start;
+    a=ri->r_symbolnum;
 
   switch(sri->r_scattered ? sri->r_type : ri->r_type) {
     
@@ -125,7 +166,7 @@ relocate(struct relocation_info *ri,struct section *sec,
 }  
 
 static int
-relocate_symbols(struct nlist *n1,struct nlist *ne,char *st1,ul start) {
+relocate_symbols(struct nlist *n1,struct nlist *ne,char *st1,ul start,struct section *sec1) {
 
   struct nlist *n;
   struct node *nd;
@@ -133,7 +174,7 @@ relocate_symbols(struct nlist *n1,struct nlist *ne,char *st1,ul start) {
   for (n=n1;n<ne;n++)
     
     if (n->n_sect) 
-      n->n_value+=start
+      n->n_value+=start+sec1[n->n_sect-1].reserved3;
     else if ((nd=find_sym_ptable(st1+n->n_un.n_strx)))
       n->n_value=nd->address; 
     else if (n->n_type&(N_PEXT|N_EXT))
@@ -163,12 +204,37 @@ static object
 load_memory(struct section *sec1,struct section *sece,void *v1,
            ul *p,ul **got,ul **gote,ul *start) { 
 
-  ul sz,gsz,sa,ma,a,fl;
+  ul sz,gsz,ma,a,fl;
+  volatile ul sa;
   struct section *sec;
   object memory;
+#ifdef W_X
+  ul text_pbits;
+#endif
   
   BEGIN_NO_INTERRUPT;
 
+  for (sec=sec1;sec<sece;sec++)
+      sec->reserved3=0;/*FIXME unneeded?*/
+
+  gsz=**got ? (**got+1)*sizeof(**got)-1 : 0;
+
+#ifdef W_X
+
+  massert(sece>sec1);
+  massert(ALLOC_SEC(sec1));
+  massert(sec1->flags&(S_ATTR_SOME_INSTRUCTIONS|S_ATTR_PURE_INSTRUCTIONS));
+  massert(!sec1->addr);
+  for (sec=sec1+1,sa=-1;sec<sece;sec++)
+    if (ALLOC_SEC(sec) && sa>sec->addr)
+      sa=sec->addr;
+  text_pbits=(sa+gsz+PAGESIZE-1)>>PAGEWIDTH;
+  sa=(text_pbits<<PAGEWIDTH)+(sa&0xf)-sa;
+  for (sec=sec1+1;sec<sece;sec++)
+    sec->addr+=(sec->reserved3=sa);
+
+#endif
+
   for (*p=sz=ma=0,sa=-1,sec=sec1;sec<sece;sec++)
     
     if (ALLOC_SEC(sec)) {
@@ -190,21 +256,23 @@ load_memory(struct section *sec1,struct section *sece,void *v1,
   ma=ma>sizeof(struct contblock) ? ma-1 : 0; 
   sz+=ma;
 
-  gsz=0;
-  if (**got) {
-    gsz=(**got+1)*sizeof(**got)-1;
-    sz+=gsz;
-  }
-  
+  sz+=gsz;
+
   memory=new_cfdata();
-  memory->cfd.cfd_size=sz; 
+  memory->cfd.cfd_size=sz;
+#ifdef W_X
+  memory->cfd.cfd_start=alloc_code_space(sz+PAGESIZE-sizeof(struct contblock),-1UL);
+  memory->cfd.cfd_start=(void *)(((ul)memory->cfd.cfd_start+(PAGESIZE-1))&~(PAGESIZE-1));
+  memory->cfd.cfd_nexp=text_pbits;
+#else
   memory->cfd.cfd_start=alloc_code_space(sz,-1UL);
+#endif
 
   a=(ul)memory->cfd.cfd_start;
   a=(a+ma)&~ma;
   for (sec=sec1;sec<sece;sec++)
     if (ALLOC_SEC(sec)) {
-      sec->addr+=a;  
+      sec->addr+=a;
       if (LOAD_SEC(sec))
        memcpy((void *)sec->addr,v1+sec->offset,sec->size);
       else
@@ -213,7 +281,11 @@ load_memory(struct section *sec1,struct section *sece,void *v1,
 
   if (**got) {
     sz=**got;
+#ifdef W_X
+    *got=(void *)memory->cfd.cfd_start+(text_pbits<<PAGEWIDTH)-gsz;
+#else
     *got=(void *)memory->cfd.cfd_start+memory->cfd.cfd_size-gsz;
+#endif
     gsz=sizeof(**got)-1;
     *got=(void *)(((ul)*got+gsz)&~gsz);
     *gote=*got+sz;
@@ -487,11 +559,14 @@ seek_to_end_ofile(FILE *f) {
 #ifndef GOT_RELOC
 #define GOT_RELOC(a) 0
 #endif
+#ifndef GOT_RELOC_EXTRA
+#define GOT_RELOC_EXTRA(a) 0
+#endif
 
 static int
 label_got_symbols(void *v1,struct section *sec,struct nlist *n1,struct nlist *ne,ul *gs) {
 
-  struct relocation_info *ri,*re;
+  struct relocation_info *ri,*re;/*scattered?*/
   struct nlist *n;
 
   *gs=0;
@@ -504,8 +579,10 @@ label_got_symbols(void *v1,struct section *sec,struct nlist *n1,struct nlist *ne
     
       massert(ri->r_extern);
       n=n1+ri->r_symbolnum;
-      if (!n->n_desc)
+      if (!n->n_desc) {
        n->n_desc=++*gs;
+       (*gs)+=GOT_RELOC_EXTRA(ri);
+      }
 
     }
 
@@ -516,13 +593,20 @@ label_got_symbols(void *v1,struct section *sec,struct nlist *n1,struct nlist *ne
 static int
 clear_protect_memory(object memory) {
 
+#ifndef W_X
+
   void *p,*pe;
 
   p=(void *)((unsigned long)memory->cfd.cfd_start & ~(PAGESIZE-1));
   pe=(void *)((unsigned long)(memory->cfd.cfd_start+memory->cfd.cfd_size + PAGESIZE-1) & ~(PAGESIZE-1));
-
   return gcl_mprotect(p,pe-p,PROT_READ|PROT_WRITE|PROT_EXEC);
 
+#else
+
+  return gcl_mprotect((void *)memory->cfd.cfd_start,memory->cfd.cfd_nexp<<PAGEWIDTH,PROT_READ|PROT_EXEC);
+
+#endif
+
 }
 
 
@@ -551,7 +635,7 @@ fasload(object faslfile) {
   
   massert(p=alloca(rls));
   
-  relocate_symbols(n1,ne,st1,start);
+  relocate_symbols(n1,ne,st1,start,sec1);
 
   find_init_address(n1,ne,st1,&init_address);
 
@@ -561,16 +645,17 @@ fasload(object faslfile) {
   
   massert(!clear_protect_memory(memory));
 
-#ifdef CLEAR_CACHE
+#if defined(HAVE_BUILTIN_CLEAR_CACHE)
+  __builtin___clear_cache((void *)memory->cfd.cfd_start,(void *)memory->cfd.cfd_start+memory->cfd.cfd_size);
+#elif defined(CLEAR_CACHE)
   CLEAR_CACHE;
 #endif
   
   massert(!un_mmap(v1,ve));
   
   if(symbol_value(sLAload_verboseA)!=Cnil) {
-    printf(";; start address for %.*s %p\n",
-          (int)VLEN(memory->cfd.cfd_name),memory->cfd.cfd_name->st.st_self,
-          memory->cfd.cfd_start);
+    coerce_to_filename(memory->cfd.cfd_name,FN1);
+    printf(";; start address for %s %p\n",FN1,memory->cfd.cfd_start);
     fflush(stdout);
   }
 
index 428730d31747fbe24577b252d1581a491399861c..cbe2b89de79d29f842c34e6334599fd478c12f86 100644 (file)
--- a/o/sgbc.c
+++ b/o/sgbc.c
@@ -191,6 +191,11 @@ sgc_sweep_phase(void) {
        if (TYPEWORD_TYPE_P(v->type) && x->d.s == SGC_NORMAL)
          continue;
 #endif
+
+#ifdef W_X
+       if (type_of(x)==t_cfdata && !x->d.tt && !is_free(x))
+         gcl_mprotect((void *)x->cfd.cfd_start,x->cfd.cfd_nexp<<PAGEWIDTH,PROT_READ|PROT_WRITE);
+#endif
        
        k++;
        make_free(x);
index ad71269019a6ea777e3123555ee2d4417b4a8450..1c976a5f899ae303f1a1bc5fbebeed4ce31e39e4 100644 (file)
@@ -808,17 +808,221 @@ copy_other (struct load_command *lc)
   curr_header_offset += lc->cmdsize;
 }
 
+static void
+copy_linkedit (struct load_command *lc, long delta) {
+
+  struct linkedit_data_command *ldc=(struct linkedit_data_command *)lc;
+
+  ldc->dataoff+=delta;
+  copy_other ((void *)ldc);
+
+}
+
+typedef struct {
+  uint32_t magic;           /* 0xfade0cc0 */
+  uint32_t length;          /* Total length of SuperBlob */
+  uint32_t count;           /* Number of sub-blobs (usually 1 or 2) */
+} CS_SuperBlob;
+
+typedef struct {
+  uint32_t type;            /* 0 for CodeDirectory, 5 for Entitlements */
+  uint32_t offset;          /* Offset from start of SuperBlob */
+} CS_BlobIndex;
+
+typedef struct {
+  uint32_t magic;           /* 0xfade0c02 */
+  uint32_t length;          /* Length of this blob */
+  uint32_t version;         /* 0x20400 for ARM64 compatibility */
+  uint32_t flags;           /* Ad-hoc is usually 0 or 0x2 (adhoc) */
+  uint32_t hashOffset;      /* Offset to the hashes from start of this blob */
+  uint32_t identOffset;     /* Offset to the identifier string */
+  uint32_t nSpecialSlots;   /* Number of special slots (usually 0 for ad-hoc) */
+  uint32_t nCodeSlots;      /* Number of 4K pages in the file */
+  uint32_t codeLimit;       /* Total size of file being signed */
+  uint8_t  hashSize;        /* 32 for SHA-256 */
+  uint8_t  hashType;        /* 2 for SHA-256 */
+  uint8_t  platform;        /* 0 */
+  uint8_t  pageSize;        /* 12 (means 2^12 = 4096) */
+  uint32_t spare2;          /* 0 */
+  /* Version 0x20400 adds: */
+  uint32_t scatterOffset;   /* 0 */
+  uint32_t teamOffset;      /* 0 or offset to Team ID string */
+  uint32_t spare3;          /* 0 */
+  uint64_t codeLimit64;     /* 0 (unless file > 4GB) */
+  uint64_t execSegBase;     /* File offset of the __TEXT segment */
+  uint64_t execSegLimit;    /* Size of the __TEXT segment */
+  uint64_t execSegFlags;    /* Flags (CS_EXECSEG_*) */
+} CS_CodeDirectory;
+
+typedef struct {
+  uint32_t magic;      /* 0xfade0c01 (Requirements Set) */
+  uint32_t length;     /* Total length of this blob (usually 12 for empty sets) */
+  uint32_t count;      /* Number of Requirements in this set (0 for ad-hoc) */
+  /* Requirement Index entries follow if count > 0 */
+} CS_Requirements;
+
+typedef struct {
+  uint32_t magic;      /* 0xfade0b01 (CSMAGIC_BLOBWRAPPER) */
+  uint32_t length;     /* Total length of header + CMS data */
+} CS_BlobWrapper;
+
+#include <CommonCrypto/CommonDigest.h>
+/*void calculate_page_hash(const void *data, size_t len, uint8_t *out_hash) {*/
+
+#define uassert(a_)                                                      \
+  ({errno=0;                                                             \
+    if (!(a_)) {                                                         \
+      emsg("The assertion %s on line %d of %s in function %s failed: %s", \
+          #a_,__LINE__,__FILE__,__FUNCTION__,strerror(errno));           \
+      do_gcl_abort();                                                    \
+    };})
+#define mwrite(a,b) uassert(write(outfd,(a),(b))==(b));
+#define mpwrite(a,b,c) uassert(pwrite(outfd,(a),(b),(c))==(b));
+#define mpred(a,b,c) uassert(pread(outfd,(a),(b),(c))==(b))
+#define RNDUP(x,y) (((x)+(y)-1)&~((y)-1))
+
+int
+dump_code_signature(struct segment_command *le_seg,
+                   struct segment_command *tx_seg,
+                   unsigned long le_ho,int csf) {
+
+  struct linkedit_data_command ldc={LC_CODE_SIGNATURE,16,0,0};
+  CS_SuperBlob sb;
+  CS_BlobIndex bi[3];
+  CS_CodeDirectory cd;
+  CS_Requirements rq;
+  CS_BlobWrapper cms;
+  const char *id="GCL";
+  const long nss=2,ss=32,id_len=RNDUP(strlen(id)+1,8);
+  long cd_len,len,np,i;
+  uint8_t hash[32],data[PAGESIZE];
+  void *v;
+
+
+  lseek(outfd,0,SEEK_END);
+  len=lseek(outfd,0,SEEK_CUR);
+  if (len%16) {
+    unsigned long x=0;
+    mwrite(&x,sizeof(x));
+    len=lseek(outfd,0,SEEK_CUR);
+  }
+  ldc.dataoff=len;
+
+  np=RNDUP(len,PAGESIZE)>>PAGEWIDTH;
+  cd_len=sizeof(cd)+id_len+(nss+np)*ss;
+  ldc.datasize=sizeof(sb)+sizeof(bi)+cd_len+sizeof(rq)+sizeof(cms);
+
+  mpwrite(&ldc,sizeof(ldc),curr_header_offset);
+  curr_header_offset+=ldc.cmdsize;
+
+  le_seg->filesize+=ldc.datasize;
+  le_seg->vmsize+=RNDUP(ldc.datasize,PAGESIZE);
+  mpwrite(le_seg,sizeof(*le_seg),le_ho);
+
+  uassert(curr_header_offset<=text_seg_lowest_offset);
+
+#if VERBOSE
+  printf ("%ld unused bytes follow Mach-O header\n",
+                text_seg_lowest_offset - curr_header_offset);
+#endif
+
+  mh.sizeofcmds=curr_header_offset-sizeof(mh);
+  mh.ncmds+=(1-csf);
+  mpwrite(&mh,sizeof(mh),0);
+
+  sb.magic=htonl(0xfade0cc0);
+  sb.length=htonl(sizeof(sb)+sizeof(bi)+cd_len+sizeof(rq)+sizeof(cms));
+  sb.count=htonl(sizeof(bi)/sizeof(*bi));
+  mwrite(&sb,sizeof(sb));
+
+  bi[0].type=htonl(0);
+  bi[0].offset=htonl(sizeof(sb)+sizeof(bi));
+  bi[1].type=htonl(2);
+  bi[1].offset=htonl(sizeof(sb)+sizeof(bi)+cd_len);
+  bi[2].type=htonl(0x10000);
+  bi[2].offset=htonl(sizeof(sb)+sizeof(bi)+cd_len+sizeof(rq));
+  mwrite(&bi,sizeof(bi));
+
+  cd.magic=htonl(0xfade0c02);
+  cd.length=htonl(cd_len);
+  cd.version=htonl(0x20400);
+  cd.flags=htonl(2);
+  cd.hashOffset=htonl(cd_len-np*ss);
+  cd.identOffset=htonl(sizeof(cd));
+  cd.nSpecialSlots=htonl(nss);
+  cd.nCodeSlots=htonl(np);
+  cd.codeLimit=htonl(len<0x100000000 ? len : 0);
+  cd.hashSize=32;
+  cd.hashType=2;
+  cd.platform=0;
+  cd.pageSize=PAGEWIDTH;
+  cd.spare2=0;
+  cd.scatterOffset=htonl(0);
+  cd.teamOffset=htonl(0);
+  cd.spare3=htonl(0);
+  cd.codeLimit64=htonll(len>=0x100000000 ? len : 0);
+  cd.execSegBase=htonll(tx_seg->fileoff);
+  cd.execSegLimit=htonll(tx_seg->filesize);
+  cd.execSegFlags=htonll(1);
+  mwrite(&cd,sizeof(cd));
+
+  uassert(v=alloca(id_len));
+  uassert(memset(v,0,id_len));
+  uassert(strcpy(v,id));
+  mwrite(v,id_len);
+
+  rq.magic=htonl(0xfade0c01);
+  rq.length=htonl(12);
+  rq.count=htonl(0);
+  CC_SHA256(&rq,sizeof(rq),hash);
+  mwrite(hash,sizeof(hash));
+
+  uassert(memset(hash,0,sizeof(hash)));
+  mwrite(hash,sizeof(hash));
+
+  for (i=0;i<np;i++) {
+    uassert(memset(data,0,sizeof(data)));
+    mpred(data,i==np-1 ? ntohl(cd.codeLimit)-(i<<PAGEWIDTH) : sizeof(data),i<<PAGEWIDTH);
+    CC_SHA256(data,sizeof(data),hash);
+    mwrite(hash,sizeof(hash));
+  }
+
+  mwrite(&rq,sizeof(rq));
+
+  cms.magic=htonl(0xfade0b01);
+  cms.length=htonl(8);
+  mwrite(&cms,sizeof(cms));
+
+  return 0;
+
+}
+
 /* Loop through all load commands and dump them.  Then write the Mach
    header.  */
 static void
 dump_it () {
 
-  int i;
-  long linkedit_delta=0,linkedit_vmdelta=0;
+  int i,csf=0;
+  long linkedit_delta=0,linkedit_vmdelta=0,linkedit_vmsize=0,text_vmaddr=0;
+  struct segment_command *le_seg=NULL,*tx_seg=NULL;
+  unsigned long le_ho=0;
   
 #if VERBOSE
   printf ("--- Load Commands written to Output File ---\n");
 #endif
+
+  for (i=0;i<nlc;i++)
+    switch(lca[i]->cmd) {
+    case LC_SEGMENT:
+      if (strncmp (((struct segment_command *) lca[i])->segname, SEG_LINKEDIT, 16) == 0) {
+       linkedit_vmsize=((struct segment_command *) lca[i])->vmsize;
+       le_seg=(struct segment_command *)lca[i];
+      } else if (strncmp (((struct segment_command *) lca[i])->segname, SEG_TEXT, 16) == 0) {
+       text_vmaddr=((struct segment_command *) lca[i])->vmaddr;
+       tx_seg=(struct segment_command *)lca[i];
+      }
+    }
+  uassert(le_seg&&tx_seg);
   
   for (i = 0; i < nlc; i++)
     switch (lca[i]->cmd) {
@@ -844,10 +1048,18 @@ dump_it () {
          extern char *data_start;
          struct section *sectp = (struct section *) (scp + 1);
          unsigned long header_offset=curr_header_offset + sizeof (struct segment_command);
+         extern int in_pre_gcl;/*support libboot.so*/
+         unsigned long heap_vmsize=                                    \
+           (in_pre_gcl ? SAVED_PRE_IMAGE_SPAN : SAVED_IMAGE_SPAN) -    \
+           (long)((long)data_start-text_vmaddr) -                      \
+           linkedit_vmsize;
+
+         if (core_end-data_start>heap_vmsize)
+           unexec_error ("data exceeds __HEAP vmsize");
          
          scp->vmaddr=(long)data_start;
-         linkedit_vmdelta=(1UL<<37)-scp->vmsize;
-         scp->vmsize=(1UL<<37);
+         linkedit_vmdelta=heap_vmsize-scp->vmsize;
+         scp->vmsize=heap_vmsize;
          scp->fileoff=curr_file_offset;
          scp->filesize=core_end-data_start;
          scp->maxprot=VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE;
@@ -858,6 +1070,7 @@ dump_it () {
          sectp->addr=scp->vmaddr;
          sectp->size=scp->filesize;
          sectp->flags=S_REGULAR;
+         sectp->offset=scp->fileoff;
 
          if (!unexec_write (header_offset, sectp, sizeof (struct section)))
            unexec_error ("cannot write section _HEAP's header");
@@ -876,6 +1089,7 @@ dump_it () {
            unexec_error ("cannot handle multiple LINKEDIT segments in input file");
          linkedit_delta = curr_file_offset - scp->fileoff;
          scp->vmaddr+=linkedit_vmdelta;
+         le_ho=curr_header_offset;
          copy_segment (lca[i]);
        } else
          copy_segment (lca[i]);
@@ -896,22 +1110,20 @@ dump_it () {
       copy_dyld_info (lca[i], linkedit_delta);
       break;
 #endif
+    case LC_CODE_SIGNATURE:
+      csf=1;
+      break;
+    case LC_DATA_IN_CODE:
+    case LC_FUNCTION_STARTS:
+    case LC_DYLD_EXPORTS_TRIE:
+      copy_linkedit(lca[i],linkedit_delta);/*FIXME*/
+      break;
     default:
       copy_other (lca[i]);
       break;
     }
-  
-  if (curr_header_offset > text_seg_lowest_offset)
-    unexec_error ("not enough room for load commands for new __DATA segments");
-  
-#if VERBOSE
-  printf ("%ld unused bytes follow Mach-O header\n",
-                text_seg_lowest_offset - curr_header_offset);
-#endif
-  
-  mh.sizeofcmds = curr_header_offset - sizeof (struct mach_header);
-  if (!unexec_write (0, &mh, sizeof (struct mach_header)))
-    unexec_error ("cannot write final header contents");
+
+  dump_code_signature(le_seg,tx_seg,le_ho,csf);
 
 }
 
@@ -1014,7 +1226,7 @@ unexec (char *outfile, char *infile, void *start_data, void *start_bss,
   if ((infd = open (infile, O_RDONLY, 0)) < 0)
     unexec_error ("cannot open input file `%s'", infile);
 
-  if ((outfd = open (outfile, O_WRONLY | O_TRUNC | O_CREAT, 0755)) < 0) {
+  if ((outfd = open (outfile, O_RDWR | O_TRUNC | O_CREAT, 0755)) < 0) {
     close (infd);
     unexec_error ("cannot open output file `%s'", outfile);
   }
@@ -1042,7 +1254,7 @@ static size_t stub_size (malloc_zone_t *zone, const void *ptr)
 
 #ifdef HAVE_MALLOC_ZONE_MEMALIGN
 static void *
-stub_memalign(size_t boundary, size_t size) {
+stub_memalign(malloc_zone_t *zone,size_t boundary, size_t size) {
 
   extern void *my_malloc (size_t);
   void *v=my_malloc(size+boundary-1);
index 789341cfcc9e85f9b21662d6a8e62f82360ee11d..1a01c22eb1b5d3cf62c420eb07349d51ba59a118 100644 (file)
@@ -41,7 +41,7 @@ vsystem(char *command) {
   char *c;
   const char *x1[]={"/bin/sh","-c",NULL,NULL},*spc=" \n\t",**p1,**pp,**pe;
   int s;
-  pid_t pid;
+  pid_t pid,pid1;
   posix_spawnattr_t attr;
   posix_spawn_file_actions_t file_actions;
   extern char **environ;
@@ -68,7 +68,9 @@ vsystem(char *command) {
   massert(!posix_spawn_file_actions_destroy(&file_actions));
 
   massert(pid>0);
-  massert(pid==waitpid(pid,&s,0));
+
+  for (;(pid1=waitpid(pid,&s,0))!=pid && errno==EINTR;);
+  massert(pid==pid1);
 
   if ((s>>8)&128)
     emsg("execvp failure when executing '%s': %s\n",command,strerror((s>>8)&0x7f));
index a96039736be12a0327015b4dc91a5fe2dbb26f3a..19fb83d37e6e190a1af3ce3512212ac84d42a61b 100644 (file)
--- a/o/usig.c
+++ b/o/usig.c
@@ -173,6 +173,18 @@ DEFUN("FEENABLEEXCEPT",object,fSfeenableexcept,SI,1,1,NONE,II,OO,OO,OO,(fixnum x
 
 }
 
+DEFUN("FETESTEXCEPT",object,fSfetestexcept,SI,1,1,NONE,II,OO,OO,OO,(fixnum x),"") {
+
+  RETURN1((object)(long)fetestexcept(x));
+
+}
+
+DEFUN("FECLEAREXCEPT",object,fSfeclearexcept,SI,1,1,NONE,II,OO,OO,OO,(fixnum x),"") {
+
+  RETURN1((object)(long)feclearexcept(x));
+
+}
+
 DEFUN("FEDISABLEEXCEPT",object,fSfedisableexcept,SI,0,0,NONE,IO,OO,OO,OO,(void),"") {
 
   fixnum x=0;
index 0287c0add9176188f572e21017d0ef460b17ae26..248bdbf544a8df04c6cb2796693969a12c3eeaf6 100644 (file)
@@ -163,6 +163,9 @@ DEFUN("XDR-READ",object,fSxdr_read,SI,2,2,NONE,OO,OO,OO,OO,(object str,object el
     return elt;
     break;
   default:
+    {short s;
+      xdr_short(xdrp,&s);
+    }/*ensure stub*/
     FEerror("unsupported xdr ~a",1,elt);
     return elt;
     break;
index dd43bb6eb8d70cad1f47577b0cebe56d6cc53e17..35e61a1d18727b559bfb98618e0537c8c072ebbc 100644 (file)
@@ -1345,14 +1345,17 @@ And so, we are saved.
     (t   t)))
 
 (defun class-applicable-using-class-p (specl type)
-  (let ((pred (memq specl (if (eq *boot-state* 'complete)
+  (let* ((pred (memq specl (if (eq *boot-state* 'complete)
                              (class-precedence-list type)
-                             (early-class-precedence-list type)))))
+                             (early-class-precedence-list type))))
+        ;FIXME C compiler bug workaround ignored variadic decl macosx arm
+        (scp (unless (or pred *in-precompute-effective-methods-p*)
+               (superclasses-compatible-p specl type))))
     (values pred
            (or pred
                (if (not *in-precompute-effective-methods-p*)
                    ;; classes might get common subclass
-                   (superclasses-compatible-p specl type)
+                   scp
                    ;; worry only about existing classes
                    (classes-have-common-subclass-p specl type))))))